我的代码 private void writeFile(){
OutputStream out = null;
try {
out=new FileOutputStream(filename);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
OutputStreamWriter writer = null;;
writer = new OutputStreamWriter(out);
BufferedWriter bw=new BufferedWriter(writer);
PrintWriter pw=new PrintWriter(bw,true);
pw.write(text);
pw.close();
}

解决方案 »

  1.   

    你的text哪来的?
    换行用的是什么?\n么?windows下换行好像应该用\r\n
      

  2.   

    别用记事本开那个文件
    用个高级点的文本编辑器
    你就能看到那个黑块的字符是什莫了
    推荐notepad++
      

  3.   

    不同的系统的回车是不同的,Linux下用的字符集是UTF-8,WINDOWS的是gbk,在Linux下的回车在windows下打开就会变成黑块,这是字符集的问题,如果想解决这个问题,所以你在写文件的时候如果直接写\n在不同系统中的不同的,用bufferedwriter的newline()方法能够解决这个问题:不同厂家生产的计算机 (IBM, Apple, VAX, Sun) 对文字的换行方法不同。newLine()方法可以输出在当前计算机上正确的换行符。谢谢
      

  4.   

    我从没再Linux下运行我的程序。详细情况是:原本正常的文件被我的Java写的记事本以读取再保存就会出现回车变成黑块
      

  5.   

    假如我读取的txt文件有1MB,读到一个文本框中,按照我上述(楼顶)的代码保存,大约需要200-1000毫秒,但是如果每写入一行加一个newline()方法,会非常灰常慢,如果是4M甚至更大的,更无法忍受
      

  6.   

    那有可能是你读出来的换行就有问题,如果在读文件的时候加上字符集限制呢?
    像下面这样:
    p_reader = new BufferedReader(
    new InputStreamReader(
    new FileInputStream(
    new File(p_dir, p_file)), "MS932")); 
    我就这么个想法,你可以试试。
      

  7.   

    明显是你写入的text内容有问题,是否发个text的例子出来参考参考?
      

  8.   

    用ultredit打开没问题了 我以前也试过从linux把文件拷到window环境下
      

  9.   


    不同的操作系统下的换行符不一样,windows是\r\n,而有的系统则是\n,你用记事本读到\n,记事本会认为是一个不认识的字符,所以是一个黑块。但是用有的编辑器打开,比如UE,已经处理过这种情况,也就是说在windows系统下UE也是认得\n作为换行符的,所以可以正常显示。
      

  10.   

    我就郁闷了,我一再强调我仅仅在windows环境下运行的我的程序,根本就不会涉及到什么linux的“\n”的问题吧?不要在这个方向浪费精力了。windows不是自带记事本和写字板吗?我的程序保存的文本文件(保存的内容是从键盘输入到JTextArea中的),用我的程序读没问题,用写字板读没问题,用记事本读就有黑块。上面好几位大哥要我用UltraEdit读取看看黑块是什么,我认为就像楼上各位一次次强调的那样,不外乎“\r\n”、“\n”中的一个。各位能不能说一下,在JTextArea中用键盘输入的回车是什么?是不是Java定义的?是的话,能否改变此设置?能改变的话,如何改变?我为开始的问题描述不清晰表示歉意,浪费了很多人的精力……
      

  11.   

    我又通读了一遍帖子,为大家的热情表示感谢,但是有个疑问啊,是不是大家回帖不看到最后就回了啊?这样的话你都不知道帖子的最新进展,回答了不是浪费吗?我还是再强调一下:1.为了读取和写入速度得到保证,我绝对不会使用任何ReadLine方法一行一行读取、写入2.各位说的不同系统、不同型号的机器对回车符处理不同,但是我仅仅在同一台仅仅装了一个Windows XP SP3的机器上测试的……3.不必推荐我notepad++或者更好的文本编辑器,这种行为可以用这个比喻:我想开发一个屏幕录制和播放的软件,发现录制了之后虽然自身来播放正常、用RealOne播放正常,但用Windows自带的WMP播放却不正常,于是有人居然推荐我:使用暴风影音吧。我除了晕倒还能做些什么?我使用暴风影音很容易,但不是每一个Windows用户都使用它啊?最终我想开发的那个软件还是不好意思让别人拿来用啊
      

  12.   

    记事本支持什么编码格式?自己研究下,而你写入文件的时候我想并不是记事本支持的,建议用UE或者editplus打开,应该就不存在这类问题了
      

  13.   

    记事本的换行是“\r\n”2个一起。只用“\n”现实的 就是黑块。
    如果用写字板换行只要“\n”就够了。
      

  14.   

    楼上各位无非是在告诉你一个原理。在windows下的换行时\r\n,而记事本是最原始的文本查看器,不会对字符做任何处理,当它只读到\n的时候,不会把\n认为是一个换行,而当做了一个不认识的字符。由于你说你是从一个Text文本框中读取文本并写入文件,那问题就应该出在你的Text里面呗。基本上的原因就是Text文本框中的换行始终是\n而不是\r\n.你要做的就是保存的时候做一下处理。另外我不明白你说的使用readline会变慢。readline是bufferedReader的一个方法,已经做了缓存处理。而像你说的一次性加载才会出现越来越慢的情况,文件大到一定程度就无法读取了
      

  15.   

    楼上正解阿,很可能是Jtextarea组件在输入回车的时候是接受的/n,那么用记事本打开就不可识别了在公司无法测试,回去试验下,但是我记得以前做读取程序时候没有遇到过这个问题,还有使用readline不会变慢,除非你的jtexearea很大,当然,这个不是问题的点