如何将大文本文件放入数组?

时间:2014-05-04 10:54:08

标签: java large-files

我有一个大文本文件。我想把文本文件中的每个字符放入Character数组中。我用这段代码来表达它。

List<String> set = new ArrayList<String>();
BufferedReader bf = new BufferedReader(new FileReader(file_path));
String check_line=bf.readLine();
while(check_line!=null){
    set.add(check_line);
    check_line=bf.readLine();
}

ArrayList<Character> charr = new ArrayList<Character>();

for(int j=0;j<set.size();++j){
        String str=set.get(j);
        for (int x = 0; x < str.length(); x ++){
        charr.add(str.charAt(x));
        }}

return charr;

但这需要很长时间。有没有有效的方法来做到这一点?

4 个答案:

答案 0 :(得分:1)

您可以使用每一行

char[] x = str.toCharArray();

答案 1 :(得分:0)

使用Java 8:

public static void main(final String[] args) throws IOException {
    final Path file = Paths.get("path", "to", "file");
    final Character[] characters = toCharacters(file);
}

public static Character[] toCharacters(final Path file) throws IOException {
    try (final Stream<String> lines = Files.lines(file)) {
        return lines.flatMapToInt(String::chars).
                mapToObj(x -> (char) x).
                toArray(Character[]::new);
    }
}

更有效的编码方式,创建的中间集合更少。不确定它会更快,但因为这涉及文件IO 非常慢

答案 2 :(得分:0)

将该行连接成一个字符串,然后将它们转换为char数组。

      public char[]  extractCharArray(String fileName) {
       char[] charArray = null;
       try(BufferedReader bf  = new BufferedReader(new FileReader(fileName))) {
         StringBuilder completeFileString = new StringBuilder();    
         String check_line=bf.readLine();
           while(check_line!=null){
            completeFileString = completeFileString.append(check_line);
           check_line=bf.readLine();
           }

         charArray = completeFileString.toString().toCharArray();

       } catch(IOException ex) {
         //Handle the exception
       }
     return charArray;
     }

答案 3 :(得分:0)

为什么使用字符串列表作为临时变量而不直接存储到字符列表?

    ArrayList<Character> charr = new ArrayList<Character>();
    String check_line=bf.readLine();
    while(check_line!=null){
        for(char c : check_line.toCharArray())
            charr.add(c);
        check_line=bf.readLine();
    }

    return charr;