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