我将增强使用java语言的旧算法,我希望它从文件中读取文本以加密它,所以我将制作一个从文件逐行读取文本的方法,然后将它们存储在数组中。我做了这个方法,它的工作,但变量"line2"读取第一行正确,但一旦下一行来了,它会擦除第一行,并把第二行,所以我能做什么??
//The CODES
Private byte[] line2;
public byte[] readFromFile (){
try (BufferedReader br = new BufferedReader(new FileReader ("C:\Users\just\Desktop\message.txt")))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
line2 = sCurrentLine.getBytes();
}
} catch (IOException e) {
e.printStackTrace();
}
return line2;
}
我是这样做的:
public byte[] readFromFile()抛出IOException{BufferedReader br = new BufferedReader(new FileReader("C:UsersjustDesktopmessage.txt"));Int k = 0;int f = 0;byte[]么;//-1表示结束,我让这个循环来计算文件的长度While (br.read() != -1){f + +;}Byte [] array2 = new Byte [f];字符串sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
line2 = sCurrentLine.getBytes();
for(byte s : line2){
array2[k]=s;
k++;}
}
return array2;
}
这个工作与我,但请任何人告诉我哪一个更好,这一个或另一个或另一个由"fge"提供,因为我希望采取最好的,谢谢你的所有。
您说您将逐行读取文件并将它们存储在数组中,但您没有将它们存储在数组中。在line2 = sCurrentLine.getBytes();
行下面,将line2存储在数组中,然后读取下一行。
sCurrentLine.getBytes();
以字节数组的形式返回sCurrentLine
的内容,因此每次执行该语句时,它将返回当前行的字节数,因此前一行的内容将丢失。因此,在读取下一行字节之前,必须将内容line2
存储在另一个数组中。
您可以使用System.arraycopy()
复制line2的内容,并使用此方法将其附加到前一行的内容。您可以查看系统类文档,了解如何使用System.arraycopy()
方法。还可以查看将字节[]附加到另一个字节[]的末尾,以将数组的内容附加到另一个数组。
我想让它从文件中读取文本来加密它
作为文本读取肯定会导致数据损坏。读取字节。
在Java 7中,就像这样简单:
final Path file = Paths.get("C:\Users\just\Desktop\message.txt");
final byte[] content = Files.readAllBytes(file);
为什么腐败?
- 首先,
BufferedReader
的.readLine()
去掉换行;因此,您要加密的内容将不相同; - 第二,你不指定一个编码来读取文件,和你不指定一个编码来编码到字节;JVM可以选择使用不同的默认编码和文件编码。想象一下,如果在windows-1252中读取文件并使用UTF-8解码会发生什么。
:
- 当你从文件中"读取一个字符串"时,读取的不是字符;这些是字节。
CharsetDecoder
将byte
s序列解码为char
s序列(可能有信息丢失); - 当你"写一个字符串"到一个文件时,写的不是字符;同样,这些都是字节。
CharsetEncoder
将char
s序列编码为byte
s序列。