先附上我写的代码:
public class File2 {
public static void main(String[] args) throws Exception{
FileOutputStream f=new FileOutputStream("J:\\资料\\JAVA资料\\IO\\007.txt");
for(int i='A'; i<='Z'; i++){
f.write(i);
f.write(' ');


}

f.flush();
f.close();
}
}public class File3{
public static void main(String[] args) throws Exception{

FileOutputStream  f=new FileOutputStream("J:\\资料\\JAVA资料\\IO\\007.txt",true);
//OutputStreamWriter fw=new OutputStreamWriter(f);
//BufferedWriter bw=new BufferedWriter(fw);
for(int i='a'; i<='z'; i++){
f.write(i);
f.write(' ');
}


f.flush();
f.close();


}

}
程序File2是向文件写入大写字母,File3是追加小写字母。可是运行完以上程序之后,就会出现一片乱码...我想知道为什么这样会出现乱码。求前辈们赐教!

解决方案 »

  1.   

    这样写:
    BufferedReader f=new BufferedReader(new InputStreamReader(new FileInputStream("J:\\资料\\JAVA资料\\IO\\007.txt",true),"UTF-8"));  
      

  2.   

    前辈,我用FileWriter写也还是一样呀!我发现只要我把两个f.write(' ');注释掉。或者注释掉其中一个,然后就不会出现乱码,但是只要两个都出现就会出现乱码。
      

  3.   

    我还发现,用BufferedReader还可以把那个乱码文件都读出来~~~~读出来的是正常的内容。
      

  4.   

    是不是f.write(' ');出问题啊!
      

  5.   


    对于JVM来说 从文件读出来二进制转化你所想要的内容,但是它存入也是按照二进制存入的 所以 你要想存字母就存string类型的吧 用valueof()方法转化成字符再存入 你试试看 
      

  6.   

    单引号等同于int,写入字母应该用双引号。或者你写入前,将char转为String.
      

  7.   

    你可以去看看API 他上面有说把一个指定的字节写入文件流,也就是说他会处理一个字节类型的数据(byte)而你的传进去的是一个char类型他们所占的byte是不一样的(就是他们的所占的字节不一样)那么这个方法可能就会把你传过来的参数强制转成byte类型这样就可能丢失一些东西,那么就会出现乱码了,你可以先把他转成byte数组在用那个传一个byte数组的方法去写,试试。
      

  8.   

    写文本文件一般使用 PrintWriter类
      

  9.   

    我觉得代码本身没什么问题,只是 M$ 自带的记事本存在bug
    可以用其他文本编辑工具试试,甚至用浏览器打开,是一切正常的
      

  10.   

    谢谢各位前辈的精心回答!应该是记事本本身的BUG,因为我用写字板打开那个文件显示完全没有问题的!这证明代码应该没有错~~~实在没想到这个点,一直以为是我代码错了。再次谢谢各位前辈!