无法正确写入java文件**

无法正确写入java文件**,java,file-io,Java,File Io,我必须读取一个文本文件,并根据一些逻辑,对该文件进行一些更改。因此,我使用 while ( (temp_string = inputstream.readLine()) != null ) { /*after employing some other logic*/ outputstream.write(temp_string); outputstream.flush(); } 其中,temp_string是一个字符串,inputstream的声明是: Buffer

我必须读取一个文本文件,并根据一些逻辑,对该文件进行一些更改。因此,我使用

 while ( (temp_string = inputstream.readLine()) != null )
 {
    /*after employing some other logic*/
    outputstream.write(temp_string);
    outputstream.flush();
}
其中,temp_string是一个字符串,inputstream的声明是:

BufferedReader inputstream  = new BufferedReader(new FileReader(pathtosilentfile)); 
outputstream
的声明是:

BufferedWriter outputstream = new BufferedWriter(new FileWriter(pathtooutputfile));

但是当我写入文本文件(新文件)时,有很多垃圾,在记事本++上显示为NULL。此外,在记事本或写字板中写入的数据看起来还可以。这是某种编码错误吗?我不明白!正在编写什么?

如果您告诉我们什么是
输出流
,这会很有帮助,但它应该是某种描述的
编写器
,可能是一个
输出流编写器
,围绕
文件流
,指定适当的编码(我想这取决于您)


如果它在记事本/写字板中看起来不错,但在记事本++中损坏了,那么可能是编码问题,但您应该决定使用哪种编码。UTF-8通常是一个不错的选择(对于ASCII来说是紧凑型的,涵盖了整个Unicode,广泛支持)但这取决于需要读取文件的内容。

如果您告诉我们什么是
输出流
,这会很有帮助,但它应该是某种描述的
编写器
,可能是围绕
文件流
输出流编写器
,指定适当的编码(我想这取决于您)


如果它在记事本/写字板中看起来不错,但在记事本++中损坏了,那么可能是编码问题,但您应该决定使用哪种编码。UTF-8通常是一个不错的选择(对于ASCII来说是紧凑的,涵盖了整个Unicode,得到了广泛的支持),但它取决于需要读取文件的内容。

首先,您正在读取行,而不是写入任何换行符。
temp\u字符串
不包含任何换行符/换行符。虽然这似乎不是你遇到的唯一问题。

首先,你在读台词,而不是写新行。
temp\u字符串
不包含任何换行符/换行符。尽管这似乎不是您遇到的唯一问题。

开始时加载的
NULL
意味着您开始写入文件的中间部分,而不是开始部分。记事本/写字板简单地忽略这一点,但您的文件将远远大于您想要的大小,并且在读取其他文件时可能会导致问题


但是,由于我们不知道什么是
outputstream
,也不知道在您开始编写之前对它做了什么,我们无法帮助您。

在开始时加载
NULL
,意味着您开始写入文件的中间而不是开头。记事本/写字板简单地忽略这一点,但您的文件将远远大于您想要的大小,并且在读取其他文件时可能会导致问题


但是,由于我们不知道什么是
outputstream
,也不知道在您开始编写之前对它做了什么,我们无法帮助您。

如果您能提供一个简短但完整的程序来演示这个问题,那将非常有帮助。请阅读@JonSkeet,事实上我刚下班回家,所以我不能再这样做了。但是,我向您保证,我所做的只是我在该代码段中所表达的内容。实际上,我想粘贴notepad++中的数据,但是那些工作人员已经对Imgur进行了防火墙。如果您只运行此代码段,您会注意到它按预期工作(除非您希望新行神奇地出现).如果你能提供一个简短但完整的程序来演示这个问题,那将非常有帮助。请阅读@JonSkeet,事实上我刚下班回家,所以我不能再这样做了。但是,我向您保证,我所做的只是我在该代码段中所表达的内容。实际上,我想粘贴notepad++中的数据,但是那些工作人员已经对Imgur进行了防火墙。如果您只运行此代码段,您会注意到它按预期工作(除非您希望新行神奇地出现)。实际上,我没有把
outputstream.newLine()
放在代码段中,但它在我的程序中。实际上,我没有把
outputstream.newLine()
放在代码段中,但它在我的程序中。很抱歉,我没有提到outputstream的声明,但是是的,它确实是一个围绕着文件编写器的缓冲编写器。到现在为止,我还没有考虑过编码,但明天我将彻底研究各自的JavaAPI,看看会发生什么。谢谢。很抱歉,我没有提到outputstream的声明,但是是的,它确实是一个围绕着文件编写器的BufferedWriter。到现在为止,我还没有考虑过编码,但明天我将彻底研究各自的JavaAPI,看看会发生什么。谢谢。是的,先生,你说得对,我每次都想写到文件的末尾。什么是正确的方法,因为这是我需要做的。我需要阅读每一行,看看它是否与某些属性相匹配,如果是,则修改该行并将其写入,如果不是,则只需将该行原样添加到文件的新副本中即可。是的,先生,您是对的,我确实每次都试图将其写入文件的末尾。什么是正确的方法,因为这是我需要做的。我需要读取每一行,看看它是否与某些属性匹配,如果是,则更改该行并将其写入,如果不是,则只需将该行原样添加到文件的新副本中即可。