从.data文件读入Java - 如何将信息存储在数组数组中?

时间:2013-09-25 11:49:18

标签: java arrays string hashtable

我有以下Java类,我用它来读取.data文件:

import java.io.*;
import java.util.Scanner;

public class ReadFile {
static File file;
String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"};
String[] data = new String[100];
String filename = "D:\\Users\\Elgan Frost\\Desktop\\careers\\Smart Stream Associate Software Engineer (Java) - Bristol\\assessment\\srcPerson.data";

public ReadFile(File f) throws FileNotFoundException {
    // TODO Auto-generated constructor stub
    try{
        //File = new File("D:\\Users\\Elgan Frost\\Desktop\\careers\\Smart Stream Associate Software Engineer (Java) - Bristol\\assessment\\srcPerson.data");
        f = new File("D:\\Users\\Elgan Frost\\Desktop\\careers\\Smart Stream Associate Software Engineer (Java) - Bristol\\assessment\\src\\Person.data");
        Scanner scanner = new Scanner(f);
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
    scanner.close();
    }
    finally{

    }
}

public void read(File file2) throws IOException{
    FileReader fr = new FileReader("D:\\Users\\Elgan Frost\\Desktop\\careers\\Smart Stream Associate Software Engineer (Java) - Bristol\\assessment\\src\\Person.data");
    BufferedReader br = new BufferedReader(fr);
    String line;

    int i = 0;
    while((line = br.readLine())!= null){
        data[i] = line;
        System.out.println(data[i]);
        i++;
    }
    br.close();

    String[] dataNew = new String[i];
    System.arraycopy(data, 0, dataNew, 0, i);
    data = dataNew;
    System.out.println("Data length: " + data.length);
}
}

为了让您更全面地了解我的代码,我还有以下Java类,其中包含我的主要方法:

import java.io.*;

public class Person {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    ReadFile rf = new ReadFile(f);
    rf.read(ReadFile.file);

}
static File f;
public String id;
public String lastName;
public String firstName;
public String street;
public String city;

public void readPerson() throws FileNotFoundException{
    //File f = new File("Smart Stream Associate Software Engineer (Java) - Bristol/assessment/src/Person.java");
    //InputStream IS = new FileInputStream(f);
}

}

目前,当我运行我的程序时,控制台会显示两行代表“Person.data ....”并给出正在读取的.data文件的文件路径,该文件路径来自行{我的ReadFile.java类中的{1}}和System.out.println(scanner.nextLine());,以及“数据长度:1”行,它将来自类末尾的行System.out.println(data[i]);

我认为这意味着程序已经读取了.data文件的前两行,但只存储了第一行。

我想要发生的是,它要读取第一行,将其存储在String中,然后将String分成单独的字符串,只要出现'space',并将每个字符串存储在一个元素中。我在课程开始时创建的字符串数组 - 使用以下行:

System.out.println("Data length: " + data.length);

单独的字符串应按顺序存储到每个字符串中 - 因此第一个字符串(在原始字符串中的第一个空格之前)将存储在“personID”中,第二个字符串(在第一个空格之后,在第二个空格之前)将存储在“lastName”等中

我想要做的是依次读取文件中的每一行,将每行中的元素存储到我的'columns'字符串数组的下一个'行'中(基本上创建一个数据表,使用数组数组),其中每个数组的第一个元素是“personID”,第二个元素是“lastName”等。

我想这样做,直到我到达文件的末尾,然后打印'columns'数组的几个元素的内容,只是为了表明它已经有效。

我不确定如何解决这个问题,只是想知道是否有人能指出我正确的方向?

1 个答案:

答案 0 :(得分:0)

final Scanner in = new Scanner(new FileReader("filename.txt"));
    final List<Person> persons= new ArrayList<Person>();
    while (in.hasNext()) {
        final String[] columns = in.next().split(" ");
                    final Person person = new Person();
                    Person.setId(column[0]);
                    Person.setName(column[1]);
                    // like this you can set all the fields     
        persons.add(person);
    }

然后,您可以从列列表中循环显示几条记录并显示相同的

根据OOPS的评论中的建议,最好的设计是拥有一个人对象并将文件中的数据存储为Person对象列表