您现在的位置是:首页 > 编程语言学习 > 后端编程语言 > 文章正文 后端编程语言
java文件操作输入输出结构详解
2022-07-08 11:54:31 后端编程语言
简介一、实验目的1. 掌握输入输出流的总体结构;2. 掌握流的概念;3. 掌握FileInputStream类、FileOutputStream类、FileReader类、FileWrite...
一、实验目的
- 1. 掌握输入输出流的总体结构;
- 2. 掌握流的概念;
- 3. 掌握FileInputStream类、FileOutputStream类、FileReader类、FileWriter类的构造方法、常用方法的使用;
- 4. 了解各种流(包括文件流、管道流、连接文件、过滤流、对象的序列化、随机访问)的使用。
二、实验代码
1.使用Java的输入输出
使用Java的输入、输出流将一个文本文件的内容按行读出,每读出一行就顺序添加行号,并写入到另一个文件中。
- package 作业练习.test4;
- import java.io.BufferedWriter;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.util.Scanner;
- import java.io.File;
- public class FileScanner {
- public static void main(String[] args) throws Exception{
- System.out.print("请输入文件名:");
- Scanner reader = new Scanner(System.in);
- String fileName = reader.nextLine();
- File f = new File("E:\\Intellij IDEL\\project\\src\\"+fileName);
- Scanner fi = new Scanner(f);
- //输出:
- String sLine = null;
- int index = 0;
- while(fi.hasNext()) {
- sLine = fi.nextLine();
- System.out.println(++index + " " + sLine);
- try {
- BufferedWriter out = new BufferedWriter(new FileWriter("test1.txt"));
- out.write(index + " " + sLine);
- } catch (IOException e) {
- }
- }
- System.out.println("文件创建成功!");
- }
- }
2.使用RandomAccessFile流将一个文本文件倒置读出
- package 作业练习.test4;
- import java.io.*;
- public class test2 {
- public static void main(String []args) throws IOException
- {
- RandomAccessFile file =new RandomAccessFile("E:\\Intellij IDEL\\project\\src\\test4\\test.txt","r");
- long len =file.length();
- while(0!=len--)
- {
- file.seek(len);
- char ch =(char)file.read();
- System.out.print(ch);
- }
- file.close();
- }
- }
3.请分别使用不带缓冲区和带缓冲区的字节流复制图片(或者音频或者视频)文件
要求:
- (1) 使用字节流FileInputStream、FileOutputStream实现复制;
- (2) 在定义字节缓冲区大小时,可以尝试16字节、256字节、1024字节等不同大小的缓冲区进行复制。
- (3) 请统计采用不同方式进行文件复制所花的时间,并进行分析。
- package 作业练习.test4;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- public class App14_3 {
- public static void main(String[] args) {
- File reader = new File("E:\\Intellij IDEL\\project\\src\\test4\\1.png");
- File writer = new File("\\Intellij IDEL\\project\\src\\test4\\2.png");
- FileInputStream fis = null;
- try {
- fis = new FileInputStream(reader);
- } catch (FileNotFoundException e1) {
- e1.printStackTrace();
- }
- BufferedInputStream bis = new BufferedInputStream(fis);
- FileOutputStream fos = null;
- try {
- fos = new FileOutputStream(writer);
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- }
- BufferedOutputStream bos = new BufferedOutputStream(fos);
- byte[] b = new byte[256];
- int len = -1;
- try {
- while ((len = bis.read(b)) != -1) {
- bos.write(b, 0, len);
- bos.flush();
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- bos.close();
- fos.close();
- bis.close();
- fis.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- package 作业练习.test4;
- import java.io.*;
- public class test3 {
- public static void main(String []args) throws IOException
- {
- // 带缓冲区的字节流拷贝一个文本文件
- FileInputStream fin =new FileInputStream("E:\\Intellij IDEL\\project\\src\\test4\\test.txt");
- FileOutputStream fout =new FileOutputStream("E:\\Intellij IDEL\\project\\src\\test4\\test1.txt");
- byte buf[] =new byte[2014]; //创建字节数组,作为临时缓冲
- if(fin.read(buf)!=-1)
- {
- fout.write(buf);
- }
- System.out.println("文件复制成功");
- fin.close();
- fout.close();
- /*带缓冲区的字符流拷贝一个文本文件
- FileReader fin =new FileReader("E:\Intellij IDEL\project\src\test4\test2.txt");
- BufferedReader din=new BufferedReader(fin) ;
- FileWriter fou =new FileWriter("E:\Intellij IDEL\project\src\test4\test.txt");
- BufferedWriter dou =new BufferedWriter(fou);
- char c[]=new char[1024]; //创建字符数组
- din.read(c);
- fou.write(c);
- System.out.println("文件复制成功");
- din.close();
- fou.close();
- fin.close();
- dou.close();
- */
- }
- }
4.请分别使用不带缓冲区和带缓冲区的字符流复制文本文件
要求:
- (1) 使用字符流FileReader、FileWriter实现复制;
- (2) 在定义字符缓冲区大小时,可以尝试16字符、256字符、1024字符等不同大小的缓冲区进行复制。
- package 作业练习.test4;
- import java.io.*;
- public class App14_5 {
- static App14_5 test=new App14_5();
- public static String openFile(String fileName){ //打开文件
- StringBuffer sb=null;
- FileInputStream fis=null;
- try {
- fis=new FileInputStream(fileName); ; //实例化输入流对象
- byte b[]=new byte[1024];
- int len;
- sb=new StringBuffer();
- while( (len = fis.read(b))!=-1 ){ //读文件并判断是否到达文件尾
- String str=new String(b,0,len);
- sb.append(str);
- }
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- }
- return sb.toString();
- }
- public static boolean saveFile(String fileName,String content) throws IOException{
- boolean state=false;
- FileOutputStream fos=null;
- try {
- fos=new FileOutputStream(fileName); //实例化输出流对象
- //把content写入到文件中
- state=true;
- } catch (Exception e) {
- e.printStackTrace();
- }finally {
- }
- return state;
- }
- public static boolean copyFile(String sourceFileName,String destinationFifleName){
- boolean sate =false;
- InputStream fis=null;
- OutputStream fos=null;
- try {
- fis=new FileInputStream(sourceFileName);
- fos=new FileOutputStream(destinationFifleName);
- int len;
- byte buffer[]=new byte[1024];
- //此处请填写多行
- len=fis.read(buffer);
- String str1=new String(buffer,0,len);
- byte[] b = str1.getBytes();
- fos.write(b);
- sate =true;
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- if(fis!=null) fis.close();
- if(fos!=null) fos.close();
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- return sate;
- }
- public static void main (String args[]) {
- App14_5 test=new App14_5();
- test.copyFile("E:\\Intellij IDEL\\project\\src\\test4\\test.txt",
- "E:\\Intellij IDEL\\project\\src\\test4\\test3.txt");
- }
- }
- }
下一篇:最后一页