方法从文件中读取使用java语言



我将增强使用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解码会发生什么。
一般

:

  • 当你从文件中"读取一个字符串"时,读取的不是字符;这些是字节。CharsetDecoderbyte s序列解码为char s序列(可能有信息丢失);
  • 当你"写一个字符串"到一个文件时,写的不是字符;同样,这些都是字节。CharsetEncoderchar s序列编码为byte s序列。

相关内容

  • 没有找到相关文章

最新更新