Java输入输出流之文件拷贝

最近学习了一下java的文件输入输出流,将以前懵懵懂懂不太理解的地方基本搞通了,而且有一种一通百通的感觉,基本上对于这些经常使用的流类可以说是掌握了,下面是我根据这几天的学习写的一个文件拷贝的工具类,贴出来算是做个学习成果总结展示吧。

  1 package qqqq;

  2 

  3 import java.io.BufferedInputStream;

  4 import java.io.BufferedOutputStream;

  5 import java.io.BufferedReader;

  6 import java.io.BufferedWriter;

  7 import java.io.File;

  8 import java.io.FileInputStream;

  9 import java.io.FileOutputStream;

 10 import java.io.FileReader;

 11 import java.io.FileWriter;

 12 import java.io.IOException;

 13 import java.io.InputStreamReader;

 14 import java.io.OutputStreamWriter;

 15 import java.io.PrintWriter;

 16 

 17 public class FileUtils {

 18 

 19     /**

 20      * 用字节流做文件复制,适用于所有类型的文件

 21      * 

 22      * @param srcFile

 23      * @param dstFile

 24      * @throws IOException

 25      */

 26     public static void copyFileByStream(File srcFile, File dstFile)

 27             throws IOException {

 28         if (!srcFile.exists()) {

 29             throw new IllegalArgumentException("源文件不存在!");

 30         }

 31         if (srcFile.isDirectory()) {

 32             throw new IllegalArgumentException("源文件是目录,不是文件!");

 33         }

 34         FileInputStream fis = new FileInputStream(srcFile);

 35         BufferedInputStream bis = new BufferedInputStream(fis);

 36 

 37         FileOutputStream fos = new FileOutputStream(dstFile);

 38         BufferedOutputStream bos = new BufferedOutputStream(fos);

 39 

 40         byte[] buff = new byte[1024];

 41         int len = bis.read(buff, 0, buff.length);

 42         while (len != -1) {

 43             bos.write(buff, 0, len);

 44             len = bis.read(buff, 0, buff.length);

 45         }

 46 

 47         // 刷新输出流,保证数据完整输出

 48         bos.flush();

 49         // 关闭输入输出流

 50         bos.close();

 51         bis.close();

 52     }

 53 

 54     /**

 55      * 用字符流做文件复制,只能用于文本文件

 56      * 

 57      * @param srcFile

 58      * @param dstFile

 59      * @throws IOException

 60      */

 61     public static void copyFileByRW(File srcFile, File dstFile)

 62             throws IOException {

 63         if (!srcFile.exists()) {

 64             throw new IllegalArgumentException("源文件不存在!");

 65         }

 66         if (srcFile.isDirectory()) {

 67             throw new IllegalArgumentException("源文件是目录,不是文件!");

 68         }

 69 

 70         FileReader fr = new FileReader(srcFile);

 71         BufferedReader br = new BufferedReader(fr);

 72 

 73         FileWriter fw = new FileWriter(dstFile);

 74         BufferedWriter bw = new BufferedWriter(fw);

 75 

 76         String line = br.readLine();

 77         while (line != null) {

 78             bw.write(line);

 79             bw.newLine();

 80             line = br.readLine();

 81         }

 82 

 83         // 刷新输出流,保证数据完整输出

 84         bw.flush();

 85         // 关闭输入输出流

 86         br.close();

 87         bw.close();

 88     }

 89 

 90     /**

 91      * 用字符流做文件复制,只能用于文本文件,优化过后可以根据文件编码方式解析,防止出现乱码现象,并且使用PrintWriter自动换行与自动刷新输出流

 92      * 

 93      * @param srcFile

 94      * @param dstFile

 95      * @param srcCS

 96      * @param dstCS

 97      * @throws IOException

 98      */

 99 

100     public static void copyFileByRW(File srcFile, File dstFile, String srcCS,

101             String dstCS) throws IOException {

102         if (!srcFile.exists()) {

103             throw new IllegalArgumentException("源文件不存在!");

104         }

105         if (srcFile.isDirectory()) {

106             throw new IllegalArgumentException("源文件是目录,不是文件!");

107         }

108 

109         InputStreamReader isr = new InputStreamReader(new FileInputStream(

110                 srcFile), srcCS);

111         BufferedReader br = new BufferedReader(isr);

112 

113         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(

114                 dstFile), dstCS);

115         // 自动刷新输出流

116         PrintWriter pw = new PrintWriter(osw, true);

117 

118         String line = br.readLine();

119         while (line != null) {

120             pw.println(line);

121             line = br.readLine();

122         }

123 

124         // 关闭输入输出流

125         br.close();

126         pw.close();

127     }

128 

129 }

 

你可能感兴趣的:(输入输出流)