Java 如何从.txt文件读取二维数组?
我有以下格式和内容的.txt文件(注意空格): 我想将它们存储到2D数组(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
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) {...}