早晨起来看了看流的概念,又搞出乱码了-.-! 最后解决了。

4 篇文章 0 订阅
2 篇文章 0 订阅

Talk is cheap , show me the cood . 不多说,看代码。



import java.io.*;

/**
* 此测试程序用来理解字节输入流与输出流,
* 要保证不乱码,只要编码与解码一致即可!
* 由于我的测试源文件使用UTF-8 编码 , 读进内存里 ===> 字节流 ===> 如果我直接new String(bytes)会以默认编码
* ===>如果我指定new String(bytes,"UTF-8") 则会编码与解码一致,不会乱码!
*/
public class FileDemo{


public static void main(String args[]){
//1 创建指定输入流,即源数据
File file = new File("D:\\a.txt");
//2 创建指定输出流,目的
File file2 = new File("D:\\b.txt");
//3 存放字符串
StringBuilder sb = new StringBuilder();
try{
//创建输出文件   
file2.createNewFile();
FileInputStream fis = new FileInputStream(file);
OutputStream fos = new FileOutputStream(file2);
byte[] bytes = new byte[1024];
int len = -1;
while((len=fis.read(bytes))!=-1){
//无论源文件a.txt 是什么编码,这里都不会乱码,只要txt文本编辑程序打开b.txt时使用正确编码即可。
fos.write(bytes,0,len);
//重点在这里:如果只是new String(bytes); 的话 在控制台输出会乱码,会以操作系统默认编码
//如果a.txt 文件中的编码是UTF-8  这里就不会乱码!  如果是其它 仍然乱码


sb.append(new String(bytes,"UTF-8"));
}
}
catch(Exception ex){
System.out.println(ex);
}
System.out.println(sb);
}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值