package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
/*
* @version V17.09
*/
public class BufferedCopyDemo {
// 我在这里使用 throws,目的是为了方便地阅读代码
// 然而 在做项目中 还是需要使用try..catch对异常做出相应的处理
public static void main(String[] args) throws IOException {
// 文件源头
String pathname = "hello.txt"; // 相对路径下的文件路径
String charsetName = "UTF-8"; // 指定字符集
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(pathname), charsetName));
// 文件目的地
String newPathName = "world.txt";
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newPathName), charsetName));
// 一行一行的读取
String line = null;
while ((line = br.readLine()) != null) {// 读一行
bw.write(line);// 写一行,但是没有进行换行
bw.newLine();// 换行
bw.flush();// 清空缓冲区,把在缓冲区的字符写到文件中
}
// 这个循环会在文本内容的后面 增加一个空行
// 没有想到如何优化这个问题,就是如何删掉最后一个换行符
// 有待学习
// 及时的释放资源
br.close();
bw.close();
}
}
以上用的转换流InputStreamReader 和 OutputStreamWriter来实现的,此转换流是由字节流转为字符流的,没有由字符流转换为字节流的转换流
直接用BufferedReader BufferedWriter会有中文乱码出现,代码如下:
public static void copyFile(String srcPath, String destPath){
Reader reader = null;
Writer writer = null;
BufferedReader buffReader = null;
BufferedWriter buffWriter = null;
try {
reader = new FileReader(srcPath);
writer = new FileWriter(destPath);
buffReader = new BufferedReader(reader);
buffWriter = new BufferedWriter(writer);
String str = "";
while ((str = buffReader.readLine())!=null) {
buffWriter.write(str);
buffWriter.newLine();
buffWriter.flush();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
try {
if (buffReader!=null) {
buffReader.close();
}
if (buffWriter!=null) {
buffReader.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}