我正在试图弄清楚如何制作一个从文本文件中读取数据的程序,并用它填充Jtable
,我需要能够搜索表格,然后用号。
文本文件中的一行包含:
name, country, gender, age, weight
行数未知(我需要计算行数)。 这是我尝试过的,但似乎崩溃了。 我需要计算行数,然后用行中的内容填充数组。
package Jone;
import java.io.*;
import java.util.*;
public class Jone {
public static void main (String [] args)throws IOException{
int rows = 0;
Scanner file = new Scanner (new File("data.txt"));
while (file.hasNextLine()){rows++;}
Object[][] data = new Object[rows][5];
System.out.print(rows);
file.nextLine();
for(int i = 0;i<rows;i++)
{
String str = file.nextLine();
String[] tokens= str.split(",");
for (int j = 0;j<5;j++)
{
data[i][j] = tokens[j];
System.out.print(data[i][j]);
System.out.print(" ");
}
}
file.close();
}
}
答案 0 :(得分:1)
按如下方式更改您的代码
package Jone;
import java.io.*;
import java.util.*;
public class Jone {
public static void main (String [] args)throws IOException{
try{
int rows = 0;
Scanner file = new Scanner (new File("data.txt"));
while (file.hasNextLine())
{
rows++;
file.nextLine();
}
file = new Scanner (new File("data.txt"));
System.out.println(rows);
Object[][] data = new Object[rows][5];
for(int i = 0;i<rows;i++)
{
String str = file.nextLine();
String[] tokens= str.split(",");
for (int j = 0;j<5;j++)
{
data[i][j] = tokens[j];
System.out.print(data[i][j]);
System.out.print(" ");
}
}
file.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
答案 1 :(得分:0)
您创建一个包含0行的数组,然后尝试访问空数组维。 此外,我想你应该在计算行数后重置扫描仪的指针。 ArrayList应该对您的目标更有用。
答案 2 :(得分:0)
class Person {
String name, country, gender; int age; double weight; public Person(String n, String c, String g, int a, double w) { name = n; country = c; gender = g; age = a; weight = w; }
}
当您从文件中提取数据时,会更好地建模您的数据(我在Person
进行了猜测,但将其称为您将要做的事情)。然后我们像这样使用ArrayList
:
public static void main(String [] args)抛出IOException {
ArrayList<Person> people = new ArrayList<Person>(); Scanner file = new Scanner (new File("data.txt")); while (file.hasNextLine()) { String str = file.nextLine(); String[] tokens= str.split(","); people.add(new Person(tokens[0], tokens[1], tokens[2], Integer.parseInt(tokens[3], Double.parseDouble(tokens[4])))); } file.close(); Person[] arrayPeople = people.toArray();
}
ArrayLists比数组更强大,因为你可以对它们执行各种操作,例如排序和搜索,当然你不必担心它们的初始大小,因为它们只是在你添加新的时候增长元件。
答案 3 :(得分:0)
Maroun是对的,你真的需要使用一些收藏来帮助你:
public static void main(String[] args) throws Exception {
List<String[]> lines = readFiles(new File("data.txt"));
String[][] data = lines.toArray(new String[0][]);
}
public static List<String[]> readFiles(File file) {
List<String[]> data = new LinkedList<>();
Scanner scanner = null;
try {
scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] tokens = line.split(",");
data.add(tokens);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
scanner.close();
}
return data;
}
请注意,您可以使用某些第三方库(如Commons IO)来读取文件的行:
List<String> lines = org.apache.commons.io.FileUtils.readLines(new File("data.txt"));)
更少的代码=更少的错误!
希望有所帮助
答案 4 :(得分:0)
移动此行
Object[][] data = new Object[rows][5];
下面是System.out.print(行);
但是根据上面的答案,我们建议在可能的情况下更改代码以使用数组列表。