保存的文件,用记事本打开回车换行都变成了黑块,怎么办

singlion 2009-07-24 04:07:03
我的代码

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();
}
...全文
2494 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
kensonly 2011-01-18
  • 打赏
  • 举报
回复
我也遇上这问题了,来学习一下
singlion 2009-09-26
  • 打赏
  • 举报
回复
感谢cosmos1984
gao11811 2009-08-26
  • 打赏
  • 举报
回复
楼上正解阿,很可能是Jtextarea组件在输入回车的时候是接受的/n,那么用记事本打开就不可识别了

在公司无法测试,回去试验下,但是我记得以前做读取程序时候没有遇到过这个问题,还有使用readline不会变慢,除非你的jtexearea很大,当然,这个不是问题的点
非典型射手 2009-08-26
  • 打赏
  • 举报
回复
楼上各位无非是在告诉你一个原理。在windows下的换行时\r\n,而记事本是最原始的文本查看器,不会对字符做任何处理,当它只读到\n的时候,不会把\n认为是一个换行,而当做了一个不认识的字符。由于你说你是从一个Text文本框中读取文本并写入文件,那问题就应该出在你的Text里面呗。

基本上的原因就是Text文本框中的换行始终是\n而不是\r\n.你要做的就是保存的时候做一下处理。

另外我不明白你说的使用readline会变慢。readline是bufferedReader的一个方法,已经做了缓存处理。而像你说的一次性加载才会出现越来越慢的情况,文件大到一定程度就无法读取了
Anndy1984 2009-08-22
  • 打赏
  • 举报
回复
记事本的换行是“\r\n”2个一起。只用“\n”现实的 就是黑块。
如果用写字板换行只要“\n”就够了。
TTOS3302041 2009-08-21
  • 打赏
  • 举报
回复
记事本支持什么编码格式?自己研究下,而你写入文件的时候我想并不是记事本支持的,建议用UE或者editplus打开,应该就不存在这类问题了
singlion 2009-08-21
  • 打赏
  • 举报
回复
我又通读了一遍帖子,为大家的热情表示感谢,但是有个疑问啊,是不是大家回帖不看到最后就回了啊?这样的话你都不知道帖子的最新进展,回答了不是浪费吗?

我还是再强调一下:

1.为了读取和写入速度得到保证,我绝对不会使用任何ReadLine方法一行一行读取、写入

2.各位说的不同系统、不同型号的机器对回车符处理不同,但是我仅仅在同一台仅仅装了一个Windows XP SP3的机器上测试的……

3.不必推荐我notepad++或者更好的文本编辑器,这种行为可以用这个比喻:我想开发一个屏幕录制和播放的软件,发现录制了之后虽然自身来播放正常、用RealOne播放正常,但用Windows自带的WMP播放却不正常,于是有人居然推荐我:使用暴风影音吧。我除了晕倒还能做些什么?我使用暴风影音很容易,但不是每一个Windows用户都使用它啊?最终我想开发的那个软件还是不好意思让别人拿来用啊
singlion 2009-08-21
  • 打赏
  • 举报
回复
我就郁闷了,我一再强调我仅仅在windows环境下运行的我的程序,根本就不会涉及到什么linux的“\n”的问题吧?不要在这个方向浪费精力了。

windows不是自带记事本和写字板吗?我的程序保存的文本文件(保存的内容是从键盘输入到JTextArea中的),用我的程序读没问题,用写字板读没问题,用记事本读就有黑块。

上面好几位大哥要我用UltraEdit读取看看黑块是什么,我认为就像楼上各位一次次强调的那样,不外乎“\r\n”、“\n”中的一个。各位能不能说一下,在JTextArea中用键盘输入的回车是什么?是不是Java定义的?是的话,能否改变此设置?能改变的话,如何改变?

我为开始的问题描述不清晰表示歉意,浪费了很多人的精力……
非典型射手 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 singlion 的回复:]
还有一个:用记事本打开有黑块,用我的类读到文本框中却很好……
[/Quote]

不同的操作系统下的换行符不一样,windows是\r\n,而有的系统则是\n,你用记事本读到\n,记事本会认为是一个不认识的字符,所以是一个黑块。但是用有的编辑器打开,比如UE,已经处理过这种情况,也就是说在windows系统下UE也是认得\n作为换行符的,所以可以正常显示。
java1109 2009-07-26
  • 打赏
  • 举报
回复
mark
fengmy123 2009-07-25
  • 打赏
  • 举报
回复
明显是你写入的text内容有问题,是否发个text的例子出来参考参考?
lee90649 2009-07-25
  • 打赏
  • 举报
回复
用ultredit打开没问题了 我以前也试过从linux把文件拷到window环境下
singlion 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 jamesliulyc 的回复:]
你用IE打开就行了
[/Quote]
大哥,你好无聊
JamesLiu 2009-07-24
  • 打赏
  • 举报
回复
你用IE打开就行了
singlion 2009-07-24
  • 打赏
  • 举报
回复
还有一个:用记事本打开有黑块,用我的类读到文本框中却很好……
非典型射手 2009-07-24
  • 打赏
  • 举报
回复
文本框中的换行很可能就只有\n
老张-AI 2009-07-24
  • 打赏
  • 举报
回复
关注
singlion 2009-07-24
  • 打赏
  • 举报
回复
;楼上各位,十分抱歉,我的描述失误。

是这样的:当读入原本存在的文件另存为或者修改后保存时,只有被改动的地方附近会出现回车变黑块的现象,而当全部是新输入的内容时,所有回车都会变成黑块
bayougeng 2009-07-24
  • 打赏
  • 举报
回复
那有可能是你读出来的换行就有问题,如果在读文件的时候加上字符集限制呢?
像下面这样:
p_reader = new BufferedReader(
new InputStreamReader(
new FileInputStream(
new File(p_dir, p_file)), "MS932"));
我就这么个想法,你可以试试。
singlion 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 hahapigzhu 的回复:]
不同的系统的回车是不同的,Linux下用的字符集是UTF-8,WINDOWS的是gbk,在Linux下的回车在windows下打开就会变成黑块,这是字符集的问题,如果想解决这个问题,所以你在写文件的时候如果直接写\n在不同系统中的不同的,用bufferedwriter的newline()方法能够解决这个问题:不同厂家生产的计算机 (IBM, Apple, VAX, Sun) 对文字的换行方法不同。¡­
[/Quote]
假如我读取的txt文件有1MB,读到一个文本框中,按照我上述(楼顶)的代码保存,大约需要200-1000毫秒,但是如果每写入一行加一个newline()方法,会非常灰常慢,如果是4M甚至更大的,更无法忍受
加载更多回复(10)

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧