如何将数据文件加载到arraylist中

时间:2017-08-08 14:42:16

标签: java arraylist

我需要帮助创建一个加载宠物的方法。我遇到了困难 编写一个while循环,读取文件pets.txt并将其存储在一个数组中 列出并返回宠物总数。一旦我装了宠物我 需要创建一个打印列表的方法,找到最重的方法 宠物和找到宠物平均体重的方法。

这是我到目前为止所做的:

try {
    inFile = new Scanner(new FileReader("pets.txt"));
} catch (FileNotFoundException ex) {
    System.out.println("File data.txt not found");
    System.exit(1);
}

int i = 0;

while (inFile.hasNext() && i < list.length) {
    // cant figure out how to write this
    i++;
}

inFile.close();

return i;

pets.txt看起来像这样:

muffin, bobby, 25.0, pug
tiny, seth, 22.0, poodle
rex, david, 40.0, lab
lucy, scott, 30.0, bulldog

此信息的格式为

(宠物名称,所有者姓名,体重,品种)

5 个答案:

答案 0 :(得分:0)

在循环中,迭代文件的每一行。因此,您必须解析其内容(Split)中的行,然后将信息保存在

其次,您应该创建一个Pet-Object (Objects and Classes)并将信息保存在每个对象中。您的arraylist包含创建的对象。

如果你有一些特定的代码,也许有人会给你一个更具体的帮助。

答案 1 :(得分:0)

到目前为止,您所做的事情也是“加载”#34;文件。您现在必须使用inFile(scanner对象)来访问pets.txt的内容。这可以通过多种方式完成,例如使用inFile.nextLine()(请参阅Javadocs)。

然后使用split()等字符串方法(再次查看文档)以必要的格式提取所需字符串中的任何部分,以存储在Pets类中。

然后,您应该将每个Pets对象存储在数据结构(例如列表)中,以便您以有效的方式编写所需的方法。

答案 2 :(得分:0)

宠物等级

Public class Pet {

    Public Pet(String pet_name, String owner, float weight, String breed) {
       this.pet_name = pet_name;
       this.owner = owner;
       this.weight = weight;
       this.breed = breed;
    }

    String pet_name;
    String owner;
    float weight;
    String breed;

    //implements getters and setters here
}

文件阅读方法

private void read_file() throws Exception {

    Scanner scanner = new Scanner(new FileReader("filename.txt"));

    List<Pet> list = new ArrayList<>();

    while (scanner.hasNextLine()) {
       String[] data = scanner.nextLine().split(",");
       Pet pet = new Pet(data[0], data[1], Float.valueOf(data[2]), data[3]);
       list.add(pet);
    }
}

答案 3 :(得分:0)

首先,我不会将数据读入简单的数组列表。我可能会使用类的ArrayList。所以我会宣布第二类是这样的:

//Declare pet class
class Pet{
    // Can be either public or private depending on your needs.
    public String petName;
    public String ownerName;
    public double weight;
    public String breed;
    //Construct new pet object
    Pet(String name, String owner, double theWeight, String theBreed){
      petName = name;
      ownerName = owner;
      weight = theWeight;
      breed = theBreed;
   }

}

然后回到你的主要课程,我会做出以下方法:

public ArrayList<Pet> loadFile(String filePath){
   ArrayList<Pet> pets = new ArrayList<Pet>();
   File file = new File(filePath);
   try {
    Scanner sc = new Scanner(file);
    while (sc.hasNextLine()) {
        String s[] = sc.nextLine().split(",");
        // Construct pet object making sure to convert weight to double.
        Pet p = new Pet(s[0],s[1],Double.parseDouble(s[2]),s[3]); 
        pets.add(p);    
    }
    sc.close();
    } 
    catch (FileNotFoundException e) {
       e.printStackTrace();
    }
    return pets;
}

答案 4 :(得分:0)

<强>解决方案

这是我使用您提到的方法解决此问题的方法。我只是创建一个宠物类并创建宠物对象的arraylist并在我使用扫描仪从文件中获取数据时将宠物对象添加到列表中!

宠物等级

public class Pet {

//Fields Variables
private String pet_name;
private String owner_name;
private double weight;
private String breed;

//Constructor
public Pet (String name, String o_name, double weight, String breed) {

    //Set the variable values
    this.pet_name = name;
    this.owner_name = o_name;
    this.weight = weight;
    this.breed = breed;
}

//Getter and setter
public String getPet_name() {
    return pet_name;
}

public void setPet_name(String pet_name) {
    this.pet_name = pet_name;
}

public String getOwner_name() {
    return owner_name;
}

public void setOwner_name(String owner_name) {
    this.owner_name = owner_name;
}

public double getWeight() {
    return weight;
}

public void setWeight(double weight) {
    this.weight = weight;
}

public String getBreed() {
    return breed;
}

public void setBreed(String breed) {
    this.breed = breed;
}
}

主要类

public class Main {

//ArrayList
private static ArrayList<Pet> pets = new ArrayList<>();

public static void main (String [] args) {

    try {
        Scanner sc = new Scanner(new File("path/to/file.txt")).useDelimiter(", |\n");

        while (sc.hasNext()) {

            //Get the info for the pet
            Pet pet;

            String name = sc.next();
            String owner_name = sc.next();
            double weight = sc.nextDouble();
            String breed = sc.next();

            //Create the pet and add it to the array list
            pet = new Pet (name, owner_name, weight, breed);
            pets.add(pet);

        }

        sc.close();

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }

    //Add your custom pets here if you would like!
    addNewPet ("muffy", "john", 30.0, "beagle");

    //Custom Methods
    printList();
    findHeaviestPet();
    findLightestPet();
    getAveragePetWeight();

}

public static void printList () {

    for (int i = 0; i < pets.size(); i++) {
        System.out.println (pets.get(i).getPet_name()+" "+pets.get(i).getOwner_name()
                +" "+pets.get(i).getWeight()+" "+pets.get(i).getBreed());
    }

}

public static void findLightestPet () {
    //So we know the value will be assigned on the first pet
    double weight = Double.MAX_VALUE;
    int petIndex = 0;

    for (int i = 0; i < pets.size(); i++) {

        if (pets.get(i).getWeight() < weight) {
            weight = pets.get(i).getWeight();
            petIndex = i;
        }
    }

    System.out.println("The lightest pet is "+pets.get(petIndex).getPet_name()+", with a weight of "+pets.get(petIndex).getWeight());
}

public static void findHeaviestPet () {
    double weight = 0.0;
    int petIndex = 0;

    for (int i = 0; i < pets.size(); i++) {

        if (pets.get(i).getWeight() > weight) {
            weight = pets.get(i).getWeight();
            petIndex = i;
        }
    }

    System.out.println("The heaviest pet is "+pets.get(petIndex).getPet_name()+", with a weight of "+pets.get(petIndex).getWeight());
}

public static void getAveragePetWeight() {
    double weights = 0;

    for (int i = 0; i < pets.size(); i++) {

        weights += pets.get(i).getWeight();
    }

    weights = (weights / pets.size());

    System.out.println ("The average weight is "+weights);
}

public static void addNewPet (String name, String o_name, double weight, String breed) {
    Pet pet = new Pet(name, o_name, weight, breed);
    pets.add(pet);
}

}

<强> Pets.txt

请确保每个项目之间都有这样的命令和空间&#34;,&#34;这就是我们知道下一个项目的时间。

muffin, bobby, 25.0, pug
tiny, seth, 22.0, poodle
rex, david, 40.0, lab
lucy, scott, 30.0, bulldog
name, owner_name, 65.0, breed