BufferedReader BufferedWriter 中文utf-8下复制copy文件

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();
			}
		}
	}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值