Java:将数组写入文本文件不一致

时间:2010-12-14 14:45:26

标签: java file-io

对于一个类项目,一个组和我一直在研究一个应用程序,该应用程序从文本文件中读取文本行并可以对其进行加密,解密(使用DES)并计算MD5哈希。程序读入文本并加密就好了,将现在加密的字符串数组按照读取顺序写回文本文件,逐行显示所有必需的回车。

然而,当解密这些字符串时,程序将明文写入文件全部在一行上,没有空格或回车符。 encrypt和decrypt方法都使用相同的fileWrite类,它使用缓冲的writer。我已经添加了一个System.out.println语句用于调试目的,打印出数组的内容,因为它们被加密和解密以检查存储中的错误,但我找不到任何错误。

即使我通过“\ n”符号人工插入回车符,文本文件在解密后都是一行。我不能为我的生活弄清楚为什么同一个班级在不同的时间会以两种不同的方式表现。将数组写入文件的代码很简单,只是逐个元素地进行,可能并不需要包含在内,但无论如何它都在这里。

    for(int i=0;i<s.length;i++){
    bufferedWriter.write(s[i]);             
    }

从我可以收集到的,问题可能源于java和记事本如何以不同方式处理新行。当它从文件中读取明文字符串时,我假设它从文本文件中接收换行符并以这种方式打印出加密文本,但是这里java表示新行不同于文件中最初的行,当这些加密的行被读取和处理时导致这个间距问题,但是,我不太确定,这就是为什么我在这里。任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:3)

如果可以,请尝试使用printWnter,方法是使用println()方法。

我相信write()方法不会改变行,你可以使用newLine()方法强制它。

另外请注意,从文件中读取时,大多数方法都不会返回换行符。

答案 1 :(得分:1)

我的猜测是你正在使用BufferedReader(删除换行符)并回写String的读取而不尝试重建换行符。 (或者添加换行符不起作用,因为你说它们不在这里)

不是使用BufferedReader,而是最好将文件视为二进制文件,一次读取块,如果它恰好是文本,则不会改变。使用文本,您无法保证\ r \ n或\ n或\ r \ n将在原始文件中重新创建。如果您对不同系统上的文本进行编码和解码,则字符编码可能会有所不同。 ;)

答案 2 :(得分:-1)

也许你忘了在最后冲洗和/或关闭作家?