FileReader fredr = new FileReader("test.txt"); BufferedReader brder = new BufferedReader((Reader) fredr); OutputStream O = new FileOutputStream("test1.txt"); DataOutputStream Out = new DataOutputStream(O);
String temp = ""; while ((temp = brder.readLine()) != null) { Out.writeBytes(new String(temp.toString().getBytes("ISO8859_1"))); System.out.println(temp); } FileInputStream fis = new FileInputStream("test1.txt");
FileOutputStream O1 = new FileOutputStream("test2.txt"); DataOutputStream Out1 = new DataOutputStream(O1);
byte[] buf = new byte[1024]; int len; while((len=fis.read(buf))>-1){ Out1.write(buf); System.out.println(new String(buf, "GB2312")); } System.out.println中文能够正常显示,但是打开生成的文件就是乱码!!
主要是编码
直接把字符串读取出来,然后通过String.getBytes()的到二进制,然后怎么处理都可以
反向操作一下就出来String了
读取的时候直接把这个文件的所有byte读取到内存,然后String str=new String(byte[])就可以了
你不考虑中文的时候有问题吗?我估计你遇到的问题是编码问题,读取到数据后通过new String(byte[],"UTF-8")将数组转换为指定的编码格式。不过这个格式要和文本文件的编码格式相同。
FileReader fredr = new FileReader("test.txt");
BufferedReader brder = new BufferedReader((Reader) fredr); OutputStream O = new FileOutputStream("test1.txt");
DataOutputStream Out = new DataOutputStream(O);
String temp = "";
while ((temp = brder.readLine()) != null) {
Out.writeBytes(new String(temp.toString().getBytes("ISO8859_1")));
System.out.println(temp);
} FileInputStream fis = new FileInputStream("test1.txt");
FileOutputStream O1 = new FileOutputStream("test2.txt");
DataOutputStream Out1 = new DataOutputStream(O1);
byte[] buf = new byte[1024];
int len;
while((len=fis.read(buf))>-1){
Out1.write(buf);
System.out.println(new String(buf, "GB2312"));
} System.out.println中文能够正常显示,但是打开生成的文件就是乱码!!
这里强制转化了String的编码为GB2312,但是写文件没有这样转换。
你要知道你写的文件实际上是个二进制文件,要想不是乱麻,就必须在写入byte数组的时候保证这些byte数组可以被系统转换为可识别字符。
写入前将字符串也转码一下就可以了
这样转换吗可是中文还是乱码
2要求通过OutputStream将a.txt写入一个二进制文件(要求可以显示,不是乱码)
现在是无论转码与否都是乱码
对不对?
BufferedReader br = null; FileOutputStream fos = null;
try {
br = new BufferedReader(new FileReader("e:\\a.txt"));
fos = new FileOutputStream("e:\\b.m");
String str;
while ( (str = br.readLine()) != null) {
fos.write(str.getBytes());
fos.write("\r\n".getBytes());
}
fos.flush();
}
catch (IOException ex) {
}finally{
try {
br.close();
}
catch (Exception ex1) {
}
try {
fos.close();
}
catch (Exception ex2) {
}
}
}
没问题的
我原来用的是fos.writeBytes(str) 就是乱码这两个方法有什么区别吗?
DataOutputStream要小心用,他对数据自己进行了封装。如果是DataOutputStream和DataInputStream对接就没关系,否则很容易出问题