【问题标题】:How to populate an ArrayList with text from an input file?如何使用输入文件中的文本填充 ArrayList?
【发布时间】:2013-03-26 22:31:35
【问题描述】:

我将一些 ArrayList 保存到一个文件中,它具有以下格式:

[hotel1, hotel2, hotel3]               // ArrayList 1 contents
[hotel5, hotel6]                       // ArrayList 2 contents

当我阅读时,我想分配一个 ArrayList myList,我想将hotel1、hotel2 和hotel3 添加到myList。有什么办法可以直接做到吗?目前我有一个读取下一行的字符串值,它保存括号。正在寻找另一种方式,以便我可以将每一行分配给一个 ArrayList 对象。

public class MyClass1 {
   ArrayList<String> myList = new ArrayList<String>();
    ... // some other code

private void loadUp() throws IOException{
    JFileChooser chooser = new JFileChooser();
        chooser.setDialogTitle("Choose a file to open...");
        checker = chooser.showOpenDialog(null);

    // if open is clicked
    if (checker == JFileChooser.APPROVE_OPTION) {
        File inFile = chooser.getSelectedFile();
        Scanner in = new Scanner(inFile);
        while (in.hasNextLine()) {
            // Here want to assign next line to myList
        }
        in.close();
}
 }

【问题讨论】:

  • 您需要这种格式还是可以使用 JSON?
  • 所以你的意思是你想把一个 ArrayList 从 toString() 方法打印到一个文件中,然后从字符串返回一个真正的 ArrayList?
  • 我想要的是,当我读取文件时,每一行都分配给一个 ArrayList。但我希望每个单词都像一个新元素,对于 ArrayList。
  • 那么你有什么尝试?逻辑步骤是 split 基于分隔符的字符串,然后将该数组写入 ArrayList
  • 正在寻找一种更直接的方法,如果有的话。我总是可以做你提到的拆分方法。

标签: java file arraylist


【解决方案1】:

使用这个:

Scanner file = new Scanner(myFile);
ArrayList<Scanner> lines = new ArrayList<>();
while(file.hasNextLine())
    lines.add(new Scanner(file.nextLine()));
ArrayList<ArrayList<String>> lists = new ArrayList<>(lines.size());
for(Scanner s : lines)
    s.useDelimeter("[, ]" + System.lineSeparator());
for(int i = 0; i < lines.size(); ++i)
{
    while(lines.get(i).hasNext())
    {
        lists.add(new ArrayList<String>());
        lists.get(i).add(lines.get(i).next());
    }
}

然后你会得到一个包含值的字符串列表列表。

【讨论】:

  • @Mr Heisenberg 但是您了解代码的工作原理和原因吗?我不打算将我的代码示例视为理所当然。此外,如果它有效,您可以接受答案,它将成为问题的主要答案(任何人都可以)。
  • 最后,我想我得到了原来的东西。我仍然需要拆分字符串,然后单独添加每个项目。不过感谢您的回答!
【解决方案2】:

尝试下面的代码来读取每一行

 BufferedReader br = new BufferedReader(new FileReader(file));
    String line;
    while ((line = br.readLine()) != null) {
       // process the line.
    }
    br.close();

【讨论】:

    猜你喜欢
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    相关资源
    最近更新 更多