当前位置: 首页 > 知识库问答 >
问题:

如何在Java中读取文本文件到不同对象类型的ArrayList?

乐刚毅
2023-03-14

我是一个编程初学者,我需要一些帮助,试图从文本文件读取到包含不同类型对象的ArrayList。我已经创建了一个控制视频目录的程序,我目前已经硬编码到程序中的ArrayList中,但我想改变这一点,所以每次程序运行时,程序都从包含目录的文本文件中读取,并将其转换为ArrayList,而不是从已经在程序中的ArrayList中读取。我已经添加了一个函数,一旦程序退出,它就会将清单写入文本文件,但我似乎无法让它从文本文件中读取。

我遇到的问题是我的ArrayList(视频)包含(字符串,字符串,字符,字符串)。我不知道如何更改我拥有的代码,以便scanner将文本文件中的每一行拆分为适当的块(标题、类型、可用性和返回日期),然后将每个单独的块插入ArrayList中的适当位置。我希望这是有道理的。

任何帮助都将不胜感激。如果你需要进一步的信息,请告诉我。

编辑:总而言之,我的问题是:如果我有一个如下所示的文本文件,我如何将它分成4行,然后每行分成4个字符串(或3个字符串和1个字符),并将每个字符串插入到ArrayList中,以便最终得到一个由4个InventoryRow组成的ArrayList如下所示:(“Casablanca”,“old”,“y”,null)

库存行类别:

class InventoryRow {
private String name;
private String type;
private Character availability;
private String returndate;

public InventoryRow(String name, String type, Character availability,
        String returndate) {
    this.name = name;
    this.type = type;
    this.availability = availability;
    this.returndate = returndate;
}

public String getReturndate() {
    return returndate;
}

public void setReturndate(String returndate) {
    this.returndate = returndate;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getType() {
    return type;
}

public void setType(String type) {
    this.type = type;
}

public Character getAvailability() {
    return availability;
}

public void setAvailability(Character availability) {
    this.availability = availability;
}

public String toString() {
    return name + "   " + type + "   " + availability + "   " + returndate;
}
}
public class InventorySort {

public static void main(String[] args) throws ParseException, JSONException, FileNotFoundException {
    /*
     * List<InventoryRow> videos = new ArrayList<InventoryRow>();
     * 
     * videos.add(new InventoryRow("Casablanca", "Old", 'Y', null));
     * videos.add(new InventoryRow("Jurassic Park", "Regular", 'N',
     * "31/07/2015")); videos.add(new InventoryRow("2012", "Regular", 'Y',
     * null)); videos.add(new InventoryRow("Ant-Man", "New", 'Y', null));
     */

    // Get's today's date and adds three to it = return date
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat dateReturn = new SimpleDateFormat("dd/MM/yyyy", Locale.UK);
    cal.add(Calendar.DATE, 3);

    Scanner input = new Scanner(System.in);
    boolean run = true;

    while (run) {
        // Read from text file
        Scanner s = new Scanner(new File("videos.txt"));
        List<InventoryRow> videos = new ArrayList<InventoryRow>();
        while (s.hasNext()) {
            videos.add(new InventoryRow(s.next(), null, null, null));
        }
        s.close();

        // Output the prompt
        System.out.println("Do you want to list, rent, check, return, add, delete or quit?");

        // Wait for the user to enter a line of text
        String line = input.nextLine();

        // List, rent and check functions
        // List function
        if (line.equals("list")) {
            // Sort videos alphabetically
            list(videos);
            // Rent function
        } else if (line.equals("rent")) {
            rent(videos, cal, dateReturn, input);
            // Check function
        } else if (line.equals("check")) {
            check(videos, input);
            // If anything else is entered
        } else if (line.equals("return")) {
            returnVideo(videos, input);
        } else if (line.equals("add")) {
            add(videos, input);
        } else if (line.equals("delete")) {
            delete(videos, input);
        } else if (line.equals("quit")) {
            run = false;
            writeFile(videos);
        } else {
            other();
        }
    }

}
private static void writeFile(List<InventoryRow> videos) {
    String fileName = "videos.txt";

    try {
        FileWriter fileWriter = new FileWriter(fileName);

        BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);
        for (InventoryRow ir : videos) {

            bufferedWriter.write(ir.toString() + System.getProperty("line.separator"));

        }
        bufferedWriter.close();
    } catch (IOException ex) {
        System.out.println("Error writing to file '" + fileName + "'");
    }
}

我的文本文件如下所示:

2012   Regular   Y   null
Ant-Man   New   Y   null
Casablanca   Old   Y   null
Jurassic Park   Regular   N   31/07/2015

共有1个答案

狄易安
2023-03-14

您可能需要这样的东西:

List<InventoryRow> videos = new ArrayList<InventoryRow>();
while (s.hasNextLine()) {
    String[] split = s.nextLine().split("   ");
    // TODO: make sure the split has correct format

    // x.charAt(0) returns the first char of the string "x"
    videos.add(new InventoryRow(split[0], split[1], split[2].charAt(0), split[3])); 
}
 类似资料:
  • 问题内容: 我想读取一个包含空格分隔值的文本文件。值是整数。如何读取并将其放入数组列表? 这是文本文件内容的示例: 我想将它包含在arraylist中。如何用Java做到这一点? 问题答案: 你可以用来将文本文件的所有行都放入。 教程:基本文件读取,写入和创建文本文件 你可以用来基于正则表达式拆分部分。 教程:数字和字符串>字符串>操纵字符串中的字符 你可以使用将转换为。 教程:数字和字符串>字符

  • 本文向大家介绍Java将对象保存到文件中/从文件中读取对象的方法,包括了Java将对象保存到文件中/从文件中读取对象的方法的使用技巧和注意事项,需要的朋友参考一下 1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: 参数obj一定要实现Serializable接口,否则会抛出java.io.NotSerializableExcept

  • 问题内容: 我试图将文本文件加载到我的JavaScript文件中,然后从该文件中读取行以获取信息,我尝试使用FileReader,但它似乎无法正常工作。有人可以帮忙吗? 问题答案: 是的,可以使用FileReader,我已经做了一个示例,这是代码: 最后,我只是读了其他一些吸引我的答案,但正如他们所建议的那样,您可能正在寻找使您能够从JavaScript文件所在的服务器(或设备)加载文本文件的代码

  • 我想从文本文件中读取文本。在下面的代码中,会发生异常(这意味着它会转到catch块)。我将文本文件放在应用程序文件夹中。我应该把这个文本文件(mani.txt)放在哪里才能正确阅读?

  • 问题内容: 我有一个文本文件。我想从一行到另一行检索内容。例如,文件可以是200K行。我想从第78行到第2735行读取内容。由于文件可能很大,所以我不想将整个内容读取到内存中。 问题答案: 这是一个可能的解决方案的开始:

  • 我试图将包含Contact类型的序列化对象的文件读入ArrayList ContactsCollection。我遇到的问题是联系的对象从未添加到ArrayList中。