Java 如何从.txt文件读取二维数组?

Java 如何从.txt文件读取二维数组?,java,stream,io,jtable,multidimensional-array,Java,Stream,Io,Jtable,Multidimensional Array,我有以下格式和内容的.txt文件(注意空格): 我想将它们存储到2D数组(holder[5][2])中,同时将它们输出到JTable。我已经知道如何用java编写和读取文件,并将读取的文件放入数组中。但是,当我使用此代码时: try { FileInputStream fi = new FileInputStream(file); DataInputStream in = new DataInputStream(fi); BufferedR

我有以下格式和内容的.txt文件(注意空格):

我想将它们存储到2D数组(
holder[5][2]
)中,同时将它们输出到
JTable
。我已经知道如何用java编写和读取文件,并将读取的文件放入数组中。但是,当我使用此代码时:

   try {

        FileInputStream fi = new FileInputStream(file);
        DataInputStream in = new DataInputStream(fi);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));

        String line = null;
        while((line = br.readLine()) != null){
            for(int i = 0; i < holder.length; i++){
                for(int j = 0; j < holder[i].length; j++){
                    holder[i][j] = line;
                }  
            }
        }

        in.close();


        } catch(Exception ex) {
            ex.printStackTrace();
        }
试试看{
FileInputStream fi=新的FileInputStream(文件);
DataInputStream in=新的DataInputStream(fi);
BufferedReader br=新的BufferedReader(新的InputStreamReader(in));
字符串行=null;
而((line=br.readLine())!=null){
对于(int i=0;i
我的
holder[][]
数组的输出不如JTable:|请帮忙?感谢任何能帮助我的人


编辑:是否也可以使用
扫描仪执行此操作?我更了解扫描仪。

您需要的是这样的东西:

int lineCount = 0;
int wordCount = 0;
String line = null;
        while((line = br.readLine()) != null){
            String[] word = line.split("\\s+");
            for(String segment : word)
            {
                holder[lineCount][wordCount++] = segment;                    
            }
            lineCount++;
            wordCount = 0; //I think now it should work, before I forgot to reset the count.
        }
请注意,这段代码未经测试,但它应该能让您大致了解情况

编辑:
\\s+
是一个正则表达式,用于表示一个或多个空格字符,可以是空格或制表符。从技术上讲,正则表达式只是
\s+
,但是我们需要添加一个额外的空格,因为
\
是转义字符Java,所以您需要转义它,因此额外的
\
。加号只是表示一个或多个的运算符

第二次编辑:是的,您也可以使用
扫描仪进行此操作,如下所示:

Scanner input = new Scanner(new File(...));
while ((line = input.next()) != null) {...}

您不需要
DataInputStream in=newdatainputstream(fi)。使用
文件InputStream
直接进入
InputStreamReader
,然后将其传递到
BufferedReader
@Eng.Fouad。谢谢你的提示。这意味着什么?“\\s+”?对不起,我对Java还很陌生。@taeyeon:我已经修改了我的回答。希望有帮助。@Kevin:我想你的意思是:它匹配的字符串至少包含一个空格字符,而不是相反;)@npinti这真的很有帮助。然而,我在这一行得到了一个ArrayOutOfBounds异常:
holder[lineCount][wordCount++]=segment我认为字数超过了holder的长度。@taeyeon:就像我说的,代码没有经过测试。问题很可能是数组位置需要交换,即使用
holder[wordCount++][lineCount]=segment
。代码应该是有效的。
Scanner input = new Scanner(new File(...));
while ((line = input.next()) != null) {...}