将文本文件读入构造函数数组(java)

时间:2011-11-05 21:31:45

标签: java arrays constructor

我有一些带有一些值的文本文件。

textfile data

line1row1 line1row2 55
line2row1 line2row2 44
line3row1 line3row2 33

我有一个数据类,我已经创建了一个构造函数。进入数组的数据,我想从文本文件中读取。

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

class Data{
    public Data(String entry1, String entry2, int entry3){}
}   
public class readData {
    public static void main(String[] args) throws Exception{
    BufferedReader inFile = new BufferedReader (new FileReader ("scores.txt"));

    Data entrydata[] = new Data[3]; //create new constructor array
    for(int i = 0; i < entrydata.length; i++ ){
            entrydata[i] = inFile.readLine();
        }
    }
}

我在“inFile.readLine()”上收到错误...无法从字符串转换为数据(“数据”指的是类)

我可以对数据进行硬编码[如下所示],但希望从文件中读取

Data entrydata[] = new Data[3];
entrydata [0] = new Data("line1row1 ", "line1row2 ", 55);
entrydata [1] = new Data("line2row1 ", "line2row2 ", 44);
entrydata [2] = new Data("line3row1 ", "line3row2 ", 33);

我想这样做的原因是我可以访问存储在数组中的信息。

5 个答案:

答案 0 :(得分:2)

inFile.readline()返回一个字符串,它不是Data对象,因此您会收到错误消息。您需要将从文件中读取的字符串拆分为数组,然后使用数组元素创建数据项。类似的东西:

String[] tmp = inFile.readline().split( " " );
entrydata[i] = new Data( tmp[0], tmp[1], Integer.parseInt( tmp[2] ) );

答案 1 :(得分:1)

我会做这样的事情

class Data{
    String entry1, entry2;
    int entry3;
    public Data(String[] datas) throws NumberFormatException {
        entry1 = datas[0];
        entry2 = datas[1];
        entry3 = Integer.parseInt(datas[2]);
    }
}
    .
    .
    .
    .
Data entrydata[] = new Data[3]; //this is not a constructor
for(int i = 0; i < entrydata.length; i++ ){
    entrydata[i] = new Data(inFile.readLine().split(" ")); //this is the constructor
}

答案 2 :(得分:0)

从文件中读取一行文本的readLine方法如何知道如何将该行转换为Data实例?它没有记在你的脑海里。

所以你必须告诉它如何将线转换为三个组件。您可以使用String.split方法在每个空格字符处拆分行,使用Integer.parseInt方法将第三个标记转换为整数。

此外,您的代码假定该文件恰好包含3行。如果不是这种情况,则应循环直到下一行为空,并将每个Data实例放入List<Data>而不是数组。该列表将自动增大,这是阵列无法做到的。

答案 3 :(得分:0)

您的readData类没有构造函数或方法。第11-15行中的代码需要位于方法/构造函数中。

如果每个条目的长度都已修复,您可以尝试使用line.substring(...)代替line.split(...)

班级名称应为ReadData

答案 4 :(得分:0)

此代码肯定会有效:

FileReader fr =new FileReader("src/FilePractice.txt");
BufferedReader in =new BufferedReader(fr);
String line;
        while((line = in.readLine()) != null){
            String[] arrray=line.split(",");
            RelationShip r=RelationShip.valueOf(arrray[2]);
            new Data(arrray[0],arrray[1],r,Integer.parseInt(arrray[3]));
            System.out.println(arrray[0]+arrray[1]+arrray[2]+arrray[3]);