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

时间:2014-03-22 10:33:15

标签: java arrays file methods readfile

我将增强一个使用java语言的旧算法,我希望它从文件中读取文本以加密它所以我将创建一个从文件中逐行读取文本然后将它们存储在数组中的方法。我制作了这个方法,它可以工作但变量" line2"正确地读取第一行但是一旦下一行到来它将擦除第一行并放第二行所以我能做什么呢?

// 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; 
}

3 个答案:

答案 0 :(得分:0)

你说你会逐行读取文件并将它们存储在一个数组中,但是你没有将它们存储在一个数组中。在line2 = sCurrentLine.getBytes();行下方,将第2行存储在数组中,然后读取下一行。

sCurrentLine.getBytes();sCurrentLine的内容作为字节数组返回,因此每次执行此语句时,它都将返回当前行的字节,因此前一行的内容将丢失。因此,在读取下一行的字节之前,必须将内容line2存储在另一个数组中。

您可以使用System.arraycopy()复制第2行的内容,并使用此方法将其附加到上一行的内容中。您可以查看System class docs以了解如何使用System.arraycopy()方法。另请查看Appending a byte[] to the end of another byte[]以将数组的内容追加到另一个数组。

答案 1 :(得分:0)

  

我希望它从文件中读取文本以加密它

以文本形式阅读是获取损坏数据的绝佳方法。读为字节。更多内容如下。

使用Java 7,它就像:

一样简单
final Path file = Paths.get("C:\\Users\\just\\Desktop\\message.txt");
final byte[] content = Files.readAllBytes(file);

为什么要腐败?

  • 首先,BufferedReader的{​​{1}} 剥离换行符;因此,您要加密的内容将不相同;
  • 第二,您没有指定用于读取文件的编码,您没有指定要编码为字节的编码;并且JVM可以选择使用不同的默认编码文件编码。想象一下,如果您在Windows-1252中读取文件并使用UTF-8解码它们会发生什么。

更一般地说:

  • 当您从文件中“读取字符串”时,读取的内容不是字符;那些是字节。然后,.readLine()会将此CharsetDecoder s序列解码为byte s序列(可能会丢失信息);
  • 当你“写一个字符串”到一个文件时,写的不是字符;再次,那些是字节。 char会将此CharsetEncoder s序列编码为char s序列。

答案 2 :(得分:0)

我这样做:

public byte [] readFromFile()抛出IOException              {         BufferedReader br = new BufferedReader(new FileReader(“C:\ Users \ just \ Desktop \ message.txt”));                 int k = 0;                         int f = 0;                         byte [] line2;                         // -1表示END,我做了这个循环来计算文件的长度                         while(br.read()!= -1)                         {f ++;                         }                        byte [] array2 = new byte [f];             String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
                       line2 = sCurrentLine.getBytes();
                    for(byte s : line2){
                    array2[k]=s;

                   k++;}
                    }
            return array2;
          }

这项工作与我但请任何人告诉我哪一个更好这个或另一个或另一个由“fge”提供因为我希望尽力而为,谢谢你们。