InputStreamReader & OutputStreamWriter 类可通过字符流的方式对文本文件进行读/写操作。
实现:
package utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class IOUtils {
public static void copyFile(File src, File dest) {
if (!src.exists()) {
System.out.println("文件不存在");
return;
}
if (dest.exists() && (!dest.isFile())) {
System.out.println("源文件是文件夹");
return;
}
FileInputStream fis;
FileOutputStream fos;
InputStreamReader input;
OutputStreamWriter output;
try {
fis = new FileInputStream(src);
fos = new FileOutputStream(dest);
input = new InputStreamReader(fis);
output = new OutputStreamWriter(fos);
int b = 0;
char[] chars = new char[10];
while ((b = input.read(chars, 0, chars.length)) != -1) {
output.write(chars, 0, b);
output.flush();
}
System.out.println("复制成功");
input.close();
output.close();
fis.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
测试类:
package test;
import static org.junit.Assert.*;
import java.io.File;
import org.junit.Test;
import utils.IOUtils;
public class IOUtilsTest {
@Test
public void testCopyFile() {
File src = new File("src/src.txt");
File dest = new File("src/dest.txt");
IOUtils.copyFile(src, dest);
}
}
通过测试可见,文本文件复制成功。
注意:
字符流只可用于操作文本文件,若用其操作二进制文件(如图片等),程序不会报错但不能够复制成功。
如:
将测试代码中的源文件和目标文件改为图片:
package test;
import static org.junit.Assert.*;
import java.io.File;
import org.junit.Test;
import utils.IOUtils;
public class IOUtilsTest {
@Test
public void testCopyFile() {
File src = new File("src/1.jpg");
File dest = new File("src/2.jpg");
IOUtils.copyFile(src, dest);
}
}
运行后会发现复制成功并出现2.jpg文件,但打开文件会出错:
故,不可用字符流操作二进制文件。