Java 如何遍历.txt文件并将结果存储在2d arrayList中

Java 如何遍历.txt文件并将结果存储在2d arrayList中,java,arraylist,Java,Arraylist,下面是一个txt文件的片段 Patrick Joseph 1254367 cmt101 Introduction to Computer Science 1 Computer Science Spring 2020 B+ 3 cmt102 Computer Networks 2 Computer Science Spring 2020 A 3 每8行减去前2行代表学院课程的属性。我试图将数据分为两个数组列表,课程和课程课程将是一个数组列表包含每个课程的属性,而课程将包含所有课程,因此课程中的数

下面是一个txt文件的片段

Patrick Joseph
1254367
cmt101
Introduction to Computer Science
1
Computer Science
Spring
2020
B+
3
cmt102
Computer Networks
2
Computer Science
Spring
2020
A
3
每8行减去前2行代表学院课程的属性。我试图将数据分为两个
数组列表
课程
课程
<代码>课程将是一个
数组列表
包含每个课程的属性,而
课程
将包含所有课程,因此
课程
中的数据应如下所示:

[0][0] cmt101
[0][1] Introduction to Computer Science
[0][2] 1
[0][3] Computer Science
[0][4] Spring 
[0][5] 2020
[0][6] B+
[0][7] 3

[1][0] cmt102
[1][1] Computer Networks
[1][2] 2
[1][3] Computer Science
[1][4] Spring 
[1][5] 2020
[1][6] A
[1][7] 3
等等。无论文件中添加了多少课程,程序都应该能够迭代,同时跳过前两行

    public static ArrayList<ArrayList<String>> courses;
    public static ArrayList<String> course;  
    
    public static void getCourses(){
                try{
                    course = new ArrayList<>();
                    courses = new ArrayList<>();
                    String fileName = "C:\\Users\\myComputer\\Desktop\\file.txt";
                    List<String> lines = Files.readAllLines(Paths.get(fileName), Charset.defaultCharset());
                    for (int i = 2; i < lines.size(); i += 8){
                        for (int j = 2; j <= 10; j++){
                            course.add(lines.get(j));
                        }
                        courses.add(course);
                    }
                }
                catch(IOException io){
                    io.printStackTrace(System.out);
                }
            }
// courses is printed in another method
公共静态数组列表课程;
公共静态ArrayList课程;
公共课程(){
试一试{
课程=新的ArrayList();
courses=newarraylist();
String fileName=“C:\\Users\\myComputer\\Desktop\\file.txt”;
List lines=Files.readAllLines(path.get(fileName)、Charset.defaultCharset());
对于(int i=2;i对于(int j=2;j而言,问题在于您对内部列表使用了相同的引用,每次迭代都会重复使用该引用。您需要在内部循环和外部循环之间创建一个新的实例并限制其范围。这将确保始终创建一个新实例并将其插入外部列表

我也找不到在方法中实例化这些列表的理由。此外,
ArrayList course;
的范围太广,破坏了您打算使用的逻辑。最后,针对接口编程:
List List List=new ArrayList()

public static List courses=new ArrayList();
公共课程(){
试一试{
列表过程=新建ArrayList();
String fileName=“C:\\Users\\myComputer\\Desktop\\file.txt”;
Charset Charset=Charset.defaultCharset();
列表行=Files.readAllLines(路径.get(文件名),字符集);
对于(int i=2;i对于(int j=2;j)谢谢您的回答。它迭代的次数正确,但重复了第一次迭代中的相同数据。我如何解决这个问题?
public static List<List<String>> courses = new ArrayList<>();
 
public static void getCourses() {
    try {
        List<String> course = new ArrayList<>();
        String fileName = "C:\\Users\\myComputer\\Desktop\\file.txt";
        Charset charset = Charset.defaultCharset();
        List<String> lines = Files.readAllLines(Paths.get(fileName), charset);

        for (int i = 2; i < lines.size(); i += 8) {
            List<String> course = new ArrayList<>();
            for (int j = 2; j <= 10; j++) {
                course.add(lines.get(j));
            }
            courses.add(course);
        }
    } catch(IOException io) {
        io.printStackTrace(System.out);
    }
}