前言:IO流主要分为两大类,分别是字节流与字符流
注意:
1、音频文件、图片、视频(范围广),就用字节流
2、只涉及到文本的,就用字符流
使用字节流复制文本内容(其他文件也可以)
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class CopyFile { public static void main(String[] args) { try { File inFile= new File( "src.txt" ); //源文件 InputStream in= new FileInputStream(inFile); //文件输入流 File outFile= new File( "tar.txt" ); //目标文件 OutputStream out= new FileOutputStream(outFile); //文件输出流 byte [] buff= new byte [ 1024 ]; //创建缓冲区,分配1024个字节大小的内存给buff int num= 0 ; while ((num=in.read(buff))!=- 1 ){ //判断每次读取的最大字节数是否为1024 out.write(buff, 0 ,num); // out.write(buff); //这样也可以,不过容易造成文件内容不正确 out.flush(); //刷新缓冲区 String s= new String(buff); System.out.println( "文件内容复制成功" ); } in.close(); //关闭输入流 out.close(); //关闭输出流 // inFile.delete(); //删除源文件 // outFile.renameTo(new File("reName.txt")); //输出文件重命名 } catch (FileNotFoundException e){ e.printStackTrace(); //在命令行打印异常信息在程序中出错的位置及原因 } catch (IOException e){ e.printStackTrace(); } } } |
使用字符流复制文本内容(仅限文本文件)
代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyFile{ public static void main(String[] args) { try { File inFile= new File( "D:/src.txt" ); //源文件 FileReader fileReader= new FileReader(inFile); //读取文件字符流 BufferedReader bufferedReader= new BufferedReader(fileReader); //把读取到的字符流放入缓存 File outFile= new File( "D:/tar.txt" ); //目标文件 FileWriter fileWrite= new FileWriter(outFile); //写入字符流 BufferedWriter bufferedWriter= new BufferedWriter(fileWrite); //把要输入的字符流放入缓存 String s= "" ; String str = "" ; while ((s=bufferedReader.readLine())!= null ){ //判断文件字符流是否读取完毕 bufferedWriter.write(s); //字符流缓存写入文件 bufferedWriter.newLine(); //按行读取,遇到换行符则换行 bufferedWriter.flush(); //刷新缓存 str+=s; } System.out.println( "文件复制内容为\n" +str); //关闭输入输出流 fileReader.close();bufferedReader.close(); fileWrite.close();bufferedWriter.close(); // inFile.delete(); //删除源文件 // outFile.renameTo(new File("reName.txt")); //输出文件重命名 } catch (FileNotFoundException e){ e.printStackTrace(); //在命令行打印异常信息在程序中出错的位置及原因 } catch (IOException e){ e.printStackTrace(); } } } |
说明:
如果想以追加文件内容,而不是覆盖的方式来复制文本内容,则修改如下
OutputStream out=new FileOutputStream(outFile,true); //字节流
FileWriter fileWrite=new FileWriter(outFile,true); //字符流
如果要在字符流指定缓存区大小,则修改如下
BufferedWriter bufferedWriter=new BufferedWriter(fileWrite,1024);
原文链接:https://www.idaobin.com/archives/761.html