我正在尝试完成一个小程序。
我有一个文本文件(.txt)来存储我所拥有的对象的不同数据。
文件的结构是下一个(例如data.txt):
每个对象都是真正的一个我称之为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 !" );
}
}
答案 0 :(得分:1)
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 [])数组,然后使用正确的类型转换值。
我希望这对你有所帮助。