从文本文件读取到并行Java数组

时间:2018-07-19 23:48:05

标签: java arrays

到目前为止,我已经在Stack Overflow上找到了很多类似的问题,但是没有一个实际上回答了我的问题。如何将文本文件中不同列的数据读入三个单独的数组中?

当前,我的BufferedReader正在遍历整个文本文件,并逐行读取它。问题是,每行都存储为单个数组元素。

如您所见,我试图通过调用“ lines []”数组中的某些数据来访问数组元素,该数组包含文件中所有行作为单独的元素。我只是不知道如何单独访问这些元素,然后将它们全部存储在单独的数组中。下面是我正在读取的文本文件的内容,然后是Java代码本身。

(Name,Team,Score)
John,Blue,20
Jamie,White,28
Jonathan,Blue,19
Ron,White,39
Ron,Blue,29

-

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Bowling7 {

    public static void main(String[] args) {
        try {
            BufferedReader fin = new BufferedReader(new FileReader(new File("bowling.txt")));
            System.out.println("File open successful!");

            int line = 0;
            String[] lines;
            String[] names;
            String[] teams;
            int[] scores;

            for (String x = fin.readLine(); x != null; x = fin.readLine()) {
                lines = x.split(",");
                teams[line] = lines[line];
                scores[line] = lines[line];
                line++;
            }

            System.out.println(lines[0]);
            System.out.println(lines[1]);

        catch (IOException e) {
            System.out.println("File I/O error!");
        }
    }
}

2 个答案:

答案 0 :(得分:2)

Java数组的长度是固定的,您的方法是关闭的,因为您认为它们是动态的。使用Collection,例如List,并且可以使用Files.readAllLines(Path)通过一个呼叫获得所有线路。切记跳过第一行(标题)并解析分数。喜欢,

File f = new File("bowling.txt");
try {
    List<String> lines = Files.readAllLines(f.toPath());
    List<String> names = new ArrayList<>();
    List<String> teams = new ArrayList<>();
    List<Integer> scores = new ArrayList<>();
    for (String line : lines.subList(1, lines.size())) {
        String[] tokens = line.split("\\s*,\\s*");
        names.add(tokens[0]);
        teams.add(tokens[1]);
        scores.add(Integer.parseInt(tokens[2]));
    }
    System.out.println("Names: " + names);
    System.out.println("Teams: " + teams);
    System.out.println("Scores: " + scores);
} catch (IOException e) {
    e.printStackTrace();
}

我明白了

Names: [John, Jamie, Jonathan, Ron, Ron]
Teams: [Blue, White, Blue, White, Blue]
Scores: [20, 28, 19, 39, 29]

答案 1 :(得分:0)

类似的事情会起作用

 List<String> lines= Files.readAllLines(file.toPath());

    String[] teams=new String[lines.size()],names=new String[lines.size()];
    int[] scores=new int[lines.size()];
    for (int i = 0; i < lines.size(); i++) {
        String[] sections=lines.get(i).split(",");
        names[i]=sections[0];
        teams[i]=sections[1];
        scores[i]= Integer.parseInt(sections[2]);
    }
    System.out.println(Arrays.toString(names));
    System.out.println(Arrays.toString(teams));
    System.out.println(Arrays.toString(scores));