Java 读取两个文本文件并将其放入二维数组

Java 读取两个文本文件并将其放入二维数组,java,multidimensional-array,Java,Multidimensional Array,我正在尝试使用扫描仪读取两个单独的文本文件,并将它们放入二维数组中。一个文件包含书名列表,另一个文件包含作者姓名列表。我想为两个文件在同一位置匹配每一行,但我很难弄清楚这一点。最大的问题是我只知道如何访问一个文件,而不是同时访问两个文件。这真的让我困惑,任何帮助都将不胜感激。到目前为止,我有以下代码: publicstaticvoidmain(字符串args[])引发异常{ File file1=新文件(“data/books.txt”); File file2=新文件(“data/names.

我正在尝试使用扫描仪读取两个单独的文本文件,并将它们放入二维数组中。一个文件包含书名列表,另一个文件包含作者姓名列表。我想为两个文件在同一位置匹配每一行,但我很难弄清楚这一点。最大的问题是我只知道如何访问一个文件,而不是同时访问两个文件。这真的让我困惑,任何帮助都将不胜感激。到目前为止,我有以下代码:

publicstaticvoidmain(字符串args[])引发异常{
File file1=新文件(“data/books.txt”);
File file2=新文件(“data/names.txt”);
扫描仪名称=新扫描仪(文件1);
扫描仪标题=新扫描仪(文件2);
int行=名称;
int列=标题;
int[]myArray=新的int[行][列];
while(sc.hasNextLine()){

对于(int i=0;i而言,似乎有两个数据文件具有平行相关数据,而names.txt中的第一行是位于books.txt文件中第一行的书籍标题的作者姓名,依此类推

您在代码中使用的所有术语都是试图获取2D数组的初始化长度值,这当然是完全错误的数据类型(int[][])。它应该是String[][]类型。我认为您试图实现的与我在下面的方法中提供的类似。请阅读代码注释:

public static String[][] readTitleAuthorFiles(String bookTitlesFilePath, String authorsFilePath) {
    // Declare the 2D Array and initialize to null in case a problem arises.
    String[][] booksArray = null;  
    List<String> bookTitles = new ArrayList<>();  // List to hold titles from titles file.
    List<String> authorNames = new ArrayList<>(); // List to hold author names from names file.
    
    // Read in titles first.
    File file = new File(bookTitlesFilePath);
    try (Scanner reader = new Scanner(file)) {
        String line;
        while(reader.hasNextLine()) {
            line = reader.nextLine().trim();
            bookTitles.add(line);
        }
    }
    catch (FileNotFoundException ex) {
        System.err.println(ex);
        return null;
    }
    
    // Read in Authors
    file = new File(authorsFilePath);
    try (Scanner reader = new Scanner(file)) {
        String line;
        while(reader.hasNextLine()) {
            line = reader.nextLine().trim();
            authorNames.add(line);
        }
    }
    catch (FileNotFoundException ex) {
        System.err.println(ex);
        return null;
    }
    
    // The Lists (bookTitles and authorNames)are now filled. 
    // These two collections are to be considered parallel
    // whereas index 1 of one list is directly related to 
    // index 1 of the other list.
    
    // Initialize our String[][] booksArray.
    booksArray = new String[bookTitles.size()][2];
    
    // Fill the 2D booksArray[][] from the two Lists
    for (int i = 0; i < bookTitles.size(); i++) {
        booksArray[i][0] = bookTitles.get(i);
        booksArray[i][1] = authorNames.get(i);
    }
    
    // Return our created 2D String Array (booksArray[][]).
    return booksArray;  
}
public static String[][]readTitleAuthorFiles(String bookTitleFilePath,String authorFilePath){
//声明2D数组,并在出现问题时初始化为null。
字符串[][]数组=null;
List bookTitles=new ArrayList();//用于保存标题文件中标题的列表。
List authorNames=new ArrayList();//用于保存名称文件中的作者姓名的列表。
//先读标题。
文件文件=新文件(BookTitleFilePath);
尝试(扫描仪阅读器=新扫描仪(文件)){
弦线;
while(reader.hasNextLine()){
line=reader.nextLine().trim();
书名。添加(行);
}
}
捕获(FileNotFoundException ex){
系统错误打印项次(ex);
返回null;
}
//读入作者
文件=新文件(authorsFilePath);
尝试(扫描仪阅读器=新扫描仪(文件)){
弦线;
while(reader.hasNextLine()){
line=reader.nextLine().trim();
authorNames.add(行);
}
}
捕获(FileNotFoundException ex){
系统错误打印项次(ex);
返回null;
}
//列表(书名和作者姓名)现在已填写完毕。
//这两个集合被认为是平行的
//而一个列表的索引1与
//另一个列表的索引1。
//初始化字符串[][]数组。
booksArray=新字符串[bookstitles.size()][2];
//从两个列表中填充2D booksArray[]]
对于(int i=0;i
要使用此方法,请执行以下操作:

// The 'books.txt' file must be provided first.
String[][] books = readTitleAuthorFiles("data/books.txt", "data/names.txt");
    
// Display the 2D String Array in console:
for (int i = 0; i < books.length; i++) {
    System.out.println(Arrays.toString(books[i]).replaceAll("\\[\\]", ""));
} 
//必须首先提供“books.txt”文件。
字符串[][]books=readTitleAuthorFiles(“data/books.txt”、“data/names.txt”);
//在控制台中显示二维字符串数组:
for(int i=0;i
sc.hasNextLine()为什么要放
如果你的扫描器被称为名称和标题?你可以从更改名称开始。非常混乱,我试图构建一个答案来引导你找到解决方案,但最终出现了越来越多的问题。为什么名称扫描器使用图书文件,而标题扫描器使用名称文件?为什么两个扫描器都不习惯使用名称文件扫描任何东西?你是如何声明整数值等于扫描对象的???myArray应该代表什么?从这个问题来看,我猜它是书籍和作者的配对,但它是一个整数数组(除非你所有的书籍和作者都有数字ID)。sc从何而来?遗憾的评论如此之短……我不想在你的工作中列出一系列错误。我只是感到困惑。如果你能帮助澄清这里应该发生的事情,我很乐意帮助你制定一个解决方案,以实现这一目标:)提供每个文本文件中包含的数据示例。