标题表述不清楚,在此说明。
我将1-65535使用BufferedWriter 写入文件中,读取的时候是输出的int类型的数,为什么 “?”号读出来的是63.
我查了下好像是关于JVM字符集编码的问题。
请问该如何解决才能够正确读取。我使用的是myeclipse.
import java.io.*;public class a {
public static void main(String[] args) throws IOException {
String file = "e:/a.txt";
int j = 0; BufferedWriter bw = new BufferedWriter(new FileWriter(file));
BufferedReader br = new BufferedReader(new FileReader(file));

for (int i = 0; i < 65535; i ++) {
bw.write(i);

}
bw.flush();


while (j != -1) {
j = br.read();
System.out.println(j);
}

bw.close();
br.close(); 

}

}

解决方案 »

  1. bw.write(i);
    br.read();这两个不匹配吧 read是读一个字节吧 write(i)写个int 
    改用readInt writeInt试试
      


  2. System.out.println((char)j); // 用char输出
      

  3. bw.writr(i) 方法是将一个int类型转换成char写入到文件
    br.read()方法是读取的单个字符,其返回值是int类型,将读取到的char转换成int返回这里可以肯定是没有错的.
      

  4. 2楼的 
    因为我用的是循环的写入 所以写入的顺序可以肯定是1-65535
    我希望的是读取的时候,读出来的int类型数据也能够是 1-65535
    而现在我读取的int类型数据,有很多的 63 ,63转成char就是 “?”。
      

  5. 应该是 Writer 类在写入字符的时候,根据缺省编码进行编码。后面的那些问号是因为缺省编码不支持那些字符,因此将其编码成ascii的'?'对应的字节指定UTF-8编码,可得到你期望得到的结果BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
      

  6.  谢谢5楼。
    我试了下进行输入文件,然后读取出来,还是会有部分的编码仍然是63.另这个是我当时写闷进去了,没想到DataInputStream 和 DataOutputStream。
    上午才想到
    分别在写入和读取的时候使用上面的流。就不会出现部分编码仍然是63的问题。
      

类似问题 »