2013-09-25 35 views
2

我有以下的Java类,我使用读取.data文件,其中:从.data文件读取到Java中 - 如何将信息存储在数组数组中?

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类中的行System.out.println(scanner.nextLine());System.out.println(data[i]);,以及行“数据长度:1”,这将h ave来自课程末尾的System.out.println("Data length: " + data.length);

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

我想要发生的事情就是读取第一行,将它存储在一个String中,然后将字符串分割成单独的字符串,只要出现一个“空格”,并将每个字符串存储在

String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"}; 

单独的字符串应该被存储到每一个在该命令 - 所以第一个字符串(在第一空间之前:字符串,我在类级的开始,通过使用线创建的数组原始字符串)将被存储在“personID”中,第二个(在第一个空格之后,在第二个之前)将被存储在“lastName”中等。

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

我想这样做,直到我到达文件的末尾,然后打印'列'数组中的几个元素,只是为了表明它已经工作。

我不知道我会怎么做,只是想知道如果有人能指出我在正确的方向吗?

+1

首先,*不要*将行存储为数组数组。相反,创建一个具有'id','lastName'等字段的'Person'类,并将这些行读入'Person'对象。使用'List'可能比数组更好,因为'List'将负责跟踪您的大小。 – chrylis

+0

我创建了Person类 - 它是我的问题中的第二个代码块...我想知道的是如何将从文件中读取的每行数据存储为新的Person对象...? – someone2088

+0

你需要创建一个'List list = new ArrayList <>();',然后在你的循环中,使用每行创建一个新的Person对象并将它添加到列表中。你可以通过解析每一行并将参数作为Java参数传递给'Person'构造函数来完成。 – chrylis

回答

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对象和文件数据存储为Person对象列表

+0

嘿,谢谢你的回答 - 正如我在回复评论中所评论的那样,我创建了Person类 - 这是我问题中的第二块代码...我想知道的是如何存储每行从文件中读取的数据作为新的Person对象...?我认为自己有点说“数组阵列” - 自从我上次做了任何编程Java已经过去几年了......您上面建议的代码使我能够将每行数据存储在单独的Person对象中? – someone2088

+0

我编辑了我的代码...看看 –

+0

感谢您更新的代码 - 但是,我发现您的代码是从.txt文件读取数据...我想从.data文件读取.. 。这是否有所作为,还是它与“filename.data”而不是“filename.txt”一样工作? – someone2088

相关问题