通过txt文件将对象创建为Java中的数组

时间:2014-04-18 00:01:32

标签: java arrays object

我正在尝试完成一个小程序。

我有一个文本文件(.txt)来存储我所拥有的对象的不同数据。

文件的结构是下一个(例如data.txt):

  • Sedane
  • 2005
  • 195000
  • Diesel
  • 蓝色
  • SUV
  • 2013
  • 34000
  • 燃料
  • 黑色

每个对象都是真正的一个我称之为Cars的类。 所以1线是汽车的类型,第2年是建造的,第3线是milage,第4线是燃料的类型,第5线是汽车的颜色。

所以基本上我需要打开文件,并在我将程序执行到包含对象的数组中时将数据加载到内存中。

我可以打开文件但是在读取数据并将其放入数组时我被阻止了。

此示例的数组大小为2,但如果我在文件中有更多条目,则在程序启动时加载时会调整它的大小。

这就是我现在的unti(对于我的代码......)

public static void loadCars () {
    FileReader fopen;
    BufferedReader opened;
    String line;

    try {
        fEntree = new FileReader( "data.txt" );
        opened = new BufferedReader( fopen );
        while ( opened.ready() ) {
            line = opened.readLine();
            // Don't know what to do here ????
        }
        opened.close();
    } catch ( IOException e ) {
        System.out.println( "File doesn't exist !" );
    }

}

3 个答案:

答案 0 :(得分:1)

像这样的人会这样做。我将文件内容逐行添加到Arraylist而不是数组。这样你就不必知道你的数组需要多大。此外,您可以随时将其更改为数组。

public ArrayList<String> readFileToMemory(String filepath)
{
    in = new BufferedReader(new FileReader( "data.txt" ));
    String currentLine = null;
    ArrayList<String> fileContents = new ArrayList<String>();

    try
    {
        while((currentLine = in.readLine()) != null)
        {
            fileContents.add(currentLine);
        }
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            in.close();
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }
    }

    return fileContents;
}

答案 1 :(得分:0)

LineNumberReader  lnr = new LineNumberReader(new FileReader(new File("File1")));
lnr.skip(Long.MAX_VALUE);

long length = lnr.getLineNumber();

lnr.close();

in = new BufferedReader(new FileReader( "data.txt" ));

Car[] cars= new Car[length/5];
String currentLine;
int i=0;

for(int i=0;i<length/5;i+=5) {
    String name = in.readLine();
    String year = in.readLine();
    String miles = in.readLine();
    String gas = in.readLine();
    String color = in.readLine();
    cars[i] = new Car(name,year,miles,gas,color);
}

您也必须处理异常,包围try catch结构中的内容。

答案 2 :(得分:0)

你可以在下面看一下我的解决方案(我也纠正/简化了读取文件的变量的一些问题,无论如何这不是主题):

public static void loadCars() {
    FileReader fopen;
    BufferedReader opened;
    String line;

    ArrayList<Car> carList = new ArrayList<Car>();
    try {
        fopen = new FileReader("data.txt");
        opened = new BufferedReader(fopen);

        int nFields = 5; // we have 5 fields in the Car class
        String[] fields = new String[nFields]; // to temporary store fields values read line by line
        int lineCounter = 0;
        while ((line = opened.readLine()) != null) {
            fields[lineCounter] = line;
            lineCounter++;
            if ((lineCounter) % nFields == 0) { //it means we have all 5 fields values for a car
                carList.add(new Car(fields)); //therefore we create a new car and we add it to the list of cars
            }

        }
        opened.close();
    } catch (IOException e) {
        System.out.println("File doesn't exist !");
    }
}

基本上我们使用ArrayList存储所有汽车,我们读取文件,等待所有字段值以创建Car对象。我将字段值存储在一个字符串数组中:我不知道你是如何实现Car类的,但是创建一个构造函数可能会很有用,它将参数作为一个字符串数组,因此它可以设置字段,例如:

class Car {

    private String type;
    private String year;
    private String milage;
    private String fuel;
    private String color;

    public Car(String[] fields) {
        type=fields[0];
        year=fields[0];
        milage=fields[0];
        fuel=fields[0];
        type=fields[0];
    }
}

但是我可以说这可能是一个太过静态的问题。 为简单起见,我假设您的所有字段都是字符串类型,但可能是&#39; year&#39;或者&#39; milage&#39;可能是int类型。在这种情况下,您可以使用Object [](而不是String [])数组,然后使用正确的类型转换值。

我希望这对你有所帮助。