【发布时间】:2019-03-05 14:07:24
【问题描述】:
嘿,伙计们,我一直在使用 BufferedReader,实际上我没有注意到这个确切的问题,直到我没有找到一些单词,我试图替换我的文件中的一些单词,但我遇到了通过这种方法我没有得到我期望的确切结果是文件中的同一行这是我的代码
BufferedReader reader = new BufferedReader(
new InputStreamReader(
new FileInputStream("C:\\files\\myfile.rtf"), StandardCharsets.ISO_8859_1));
PrintWriter writer = new PrintWriter(new BufferedOutputStream(new FileOutputStream("C:\\files\\my2file.rtf")));
String str;
while ((str = reader.readLine()) != null) {
System.out.println(str);
str = str.replace("CivClient", "myname"); // doesn't work
str = str.replace("AdresseClient", "myname"); // doesn't work
str = str.replace("lastname", "myname");
str = str.replace("firstname", "myname");
}
writer.close();
reader.close();
执行此代码后,我发现“CivClient”这个词并没有按原样出现,而是分开了 这是日志的一部分,而不是全部。你会注意到这个词并没有按原样出现。 感谢你的付出。亲爱的stackoverflowers。
VOS PRESTATIONS\~:\line C}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10116111
lient> lastname}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10116111 > firstname}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10116111 >\line A}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10116111dresse}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid5071958C}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10116111 lient>\line CPClient}{\rtlch\fcs1 \af0 \ltrch\fcs0 \insrsid10116111 >
【问题讨论】:
-
请正确格式化您的示例。另外,请尽量不要写入您正在读取的同一文件,尤其是在使用不同编码时。这可能会影响结果。而是写入临时文件,成功后删除旧文件并复制/移动临时文件以替换它(或者将临时文件的内容复制到原始文件中)。
-
作为一种方法来确定您的问题是在阅读器中还是在您的替换语句中,当您注释掉 str.replace 行时,文件是否会像原始文件一样打印出来?
-
您能否清楚说明您读取的数据的结构、您获得的确切输出以及您的预期?
-
一次读写同一个文件是个坏主意,除非你想深入了解文件系统细节,否则不要这样做。
-
是的,文档与其他占位符一起打印得很清楚,这里的问题是 readline() 上的某些单词不会像其他单词一样出现,有些被替换,而其他单词则没有,@BreakBB 它是我正在阅读的只是一个 rtf 文件,占位符是
但问题是所有其他单词都只被替换了这个。我没有同时读取和写入我更改了文件名。
标签: java file bufferedreader readline