Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从包含多个对象的文本文件创建对象_Java_File_Object_Text_Arraylist - Fatal编程技术网

Java 从包含多个对象的文本文件创建对象

Java 从包含多个对象的文本文件创建对象,java,file,object,text,arraylist,Java,File,Object,Text,Arraylist,我需要从txt文件中读取有关汽车的信息,然后将其保存到ArrayList。文件中的第一行告诉您文件中有多少辆车 txt文件如下所示: 3 2011 Toyota Corolla 2009 Honda Civic 2012 Honda Accord 等等 我知道如何从用户输入创建对象,但我正在尝试编辑它,以便从文件中读取它 通常我会建议使用文件阅读器,但您说您正在重构从用户处读取此信息的代码。我猜,您正在使用扫描仪读取输入,因此最简单的更改方法是替换 Scanner sc = new Sca

我需要从txt文件中读取有关汽车的信息,然后将其保存到
ArrayList
。文件中的第一行告诉您文件中有多少辆车

txt文件如下所示:

3
2011
Toyota 
Corolla
2009
Honda
Civic 
2012
Honda
Accord
等等


我知道如何从用户输入创建对象,但我正在尝试编辑它,以便从文件中读取它

通常我会建议使用
文件阅读器
,但您说您正在重构从用户处读取此信息的代码。我猜,您正在使用
扫描仪读取输入,因此最简单的更改方法是替换

Scanner sc = new Scanner(System.in);
为此:

Scanner sc = new Scanner(new File("someFile.txt"));
然后,您可以像这样使用
扫描仪

String fileName = "cars.txt";
List<Car> cars = new ArrayList<>();
try (Scanner sc = new Scanner(new File("someFile.txt"))){
    int count = sc.nextInt();
    for (int i = 0; i < count; i++) {
        int year = sc.nextInt();
        String brand = sc.next();
        String type = sc.next();
        cars.add(new Car(year, brand, type));
    }
} catch (IOException e) {
    System.err.println("error reading cars from file "+fileName);
    e.printStackTrace();
}
String fileName=“cars.txt”;
List cars=new ArrayList();
尝试(Scanner sc=new Scanner(新文件(“someFile.txt”)){
int count=sc.nextInt();
for(int i=0;i
在从
扫描仪
读取之前,也要使用
sc.hasNext()
sc.hasNext()
,因为如果文件没有有效内容,代码可能会抛出异常


您可以在我发布的另一个(不同的)答案中看到
Car

如果您不只是想重构使用
扫描仪的代码
,您可以使用
文件阅读器

String fileName = "cars.txt";
List<Car> cars = new ArrayList<>();
try (BufferedReader reader = new BufferedReader(new FileReader(fileName))){
    int count = Integer.parseInt(reader.readLine());
    for (int i = 0; i < count; i++) {
        int year = Integer.parseInt(reader.readLine());
        String brand = reader.readLine();
        String type = reader.readLine();
        cars.add(new Car(year, brand, type));
    }
} catch (IOException | NumberFormatException e) {
    System.err.println("error reading cars from file "+fileName);
    e.printStackTrace();
}

请包括您目前拥有的代码以及问题的具体原因。我已经做了那部分,我知道如何读取文本文件。我遇到的问题是,我想保存汽车的每个部分;年份、名称、型号。然后我需要使用这些保存的变量,并用它们创建一个对象。我添加了一个部分,您可以使用
扫描器
读取值。因此,我尝试了代码,如果我自己设置计数,而不是从文件中读取计数,它就会起作用;它工作正常,但如果我让它读取文件中的第一个数字(3),它会跳过一行,因此我的输出是{(,2011,丰田)(corolla,2009,本田),等等)我在你上面发布的文件中尝试了这个代码,效果很好。你真的使用了这个代码并且文件中有相同的文本吗?因为我过去有过不好的经历:请注意,如果你有两个不同的答案,不仅可以接受两次回答
public class Car {
    private final int year;
    private final String brand;
    private final String type;

    public Car(int year, String brand, String type) {
        this.year = year;
        this.brand = brand;
        this.type = type;
    }

    public int getYear() {
        return year;
    }

    public String getBrand() {
        return brand;
    }

    public String getType() {
        return type;
    }
}