Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java从文件中读取2D数组_Java_File_File Io - Fatal编程技术网

Java从文件中读取2D数组

Java从文件中读取2D数组,java,file,file-io,Java,File,File Io,假设我有一个以下格式的文件: 3 4 1,2,3,4 5,6,7,8 9,10,11,12 文件的前两行表示二维数组的行数和列数。此后,每一行表示2D数组中每一行的值。我正在尝试读取此文件并在java中创建一个2D整数数组。我尝试了以下代码: public class PrintSpiral { private static BufferedReader in = null; private static int rows = 0; private static int

假设我有一个以下格式的文件:

3
4
1,2,3,4
5,6,7,8
9,10,11,12
文件的前两行表示二维数组的行数和列数。此后,每一行表示2D数组中每一行的值。我正在尝试读取此文件并在java中创建一个2D整数数组。我尝试了以下代码:

public class PrintSpiral {
    private static BufferedReader in = null;
    private static int rows = 0;
    private static int columns = 0;
    private static int [][] matrix = null;
    public static void main(String []args) throws Exception {
        try {
            String filepath = args[0];
            int lineNum = 0;

            int row=0;
            in = new BufferedReader(new FileReader(filepath));
            String line = in.readLine();
            while(line!=null) {
                lineNum++;
                if(lineNum==1) {
                    rows = Integer.parseInt(line);
                    System.out.println("The number of rows of the matrix are: " + rows);
                } else if(lineNum==2) {
                    columns = Integer.parseInt(line);
                    System.out.println("The number of columns of the matrix are: " + columns);
                    matrix = new int[rows][columns];
                } else {
                    String [] tokens = line.split(",");
                    for (int j=0; j<tokens.length; j++) {
                        System.out.println("I am filling the row: " + row);
                        matrix[row][j] = Integer.parseInt(tokens[j]);
                    }
                    row++;
                }
            }
        } catch (Exception ex) {
            System.out.println("The code throws an exception");
            System.out.println(ex.getMessage());
        } finally {
            if (in!=null) in.close();
        }
        System.out.println("I am printing the matrix: ");
        for (int i=0; i < rows; i++) {
            for(int j=0; j < columns; j++)
                System.out.print(matrix[i][j]);
            System.out.println("");
        }
    }
}

显然,java代码没有正确读取文件。另外,我的代码抛出一个异常。我不确定是什么导致了这个异常。我似乎不知道我的代码出了什么问题。谢谢

很明显,循环中没有readLine,因此它只读取文件的第一行


为什么还要麻烦指定行/列呢?为什么不直接从数据本身中找出它呢?

很明显,循环中没有读取行,所以它只读取文件的第一行


为什么还要麻烦指定行/列呢?为什么不从数据本身中找出答案呢?

在while循环的末尾,添加in.readline


您只是永远保持同一行并在其上循环。

在while循环的末尾,添加in.readline

你只是永远保持同一条线并在上面循环。

改变

in = new BufferedReader(new FileReader(filepath));
String line = in.readLine();
while(line!=null) { .....

要在每个循环的开始处读取新行,请更改

in = new BufferedReader(new FileReader(filepath));
String line = in.readLine();
while(line!=null) { .....


要在每个循环的开头读取新行

如果我没有指定rows/columnsn,在读取文件的所有行之前,我不知道矩阵的行数。在这种情况下,我不知道如何初始化arraymatrix=new int[rows][columns];在我到达文件末尾之前。我可能错过了什么。任何提示/谢谢!我要么需要对文件进行多次传递,要么使用额外的内部数据结构作为中介。这是一个优雅的方法,我不确定!人们通常不知道数据的大小。使用列表如果我没有指定rows/columnsn,那么在读取文件的所有行之前,我不知道矩阵的行数。在这种情况下,我不知道如何初始化arraymatrix=new int[rows][columns];在我到达文件末尾之前。我可能错过了什么。任何提示/谢谢!我要么需要对文件进行多次传递,要么使用额外的内部数据结构作为中介。这是一个优雅的方法,我不确定!人们通常不知道数据的大小。使用列表谢谢!真不敢相信我竟然忽略了。谢谢!我不敢相信我忽略了这一点。
in = new BufferedReader(new FileReader(filepath));
String line = null;
while((line = in.readLine()) !=null) { .....