【问题标题】:#Tablesaw #Java When exported to csv, the table is reduce to only the last element of the list#Tablesaw #Java 导出为 csv 时,表格缩减为仅列表的最后一个元素
【发布时间】:2020-07-19 19:40:16
【问题描述】:

我自学 Java,我正在尝试做一些工作程序。 如标题所示, 表看起来不错。 但是当我导出到 Csv 时,只保存最后一个元素。

我一定在某个地方犯了错误。 我们将非常感谢您的帮助。

    public void listInsideFolder(String nomFile) throws Exception {
    File file = new File(nomFile);
    File[] listOfFiles = file.listFiles();

    List<String> Adresses = new ArrayList<>();
    List<String> Names = new ArrayList<>();

    for (int i = 0; i < listOfFiles.length; i++) {
        if (listOfFiles[i].isFile()) {
            Adresses.add(listOfFiles[i].getAbsolutePath());
            Names.add(listOfFiles[i].getName());
            }

        StringColumn column0 = StringColumn.create("Names", Names);
        StringColumn column1 = StringColumn.create("Addresses",Adresses);

        Table t = Table.create();

        t.addColumns(column0);
        t.addColumns(column1);

      // System.out.println(t);
       // System.out.println(column0);
        // System.out.println(Names);

        t.write().csv("C:\\Users\\user\\Desktop\\Dossier\\Floweriest.csv");

        Adresses.clear();
        Names.clear();
        t.clear();
        column0.clear();
        column1.clear();
    }
}

【问题讨论】:

  • 也许 CSV 在每次迭代时都被过度使用了?是否有任何选项/方法可以确保 追加 到文件?
  • 我不明白的是,CSV 的命令在循环之外。它应该可以工作。

标签: java tablesaw


【解决方案1】:

按照@fantaghirocco 的建议,您的 CSV 文件在每次迭代中都会被覆盖。

我并不完全清楚你想要做什么。如果您希望每次迭代都有一个单独的输出文件,则需要为循环中的每次迭代提供一个新文件名。

如果您尝试使用所有其他文件中的数据制作一个输出 CSV 文件,则需要在循环之外设置表格等。像这样:

public void listInsideFolder(String nomFile) throws Exception {

    File file = new File(nomFile);
    File[] listOfFiles = file.listFiles();

    List<String> Adresses = new ArrayList<>();
    List<String> Names = new ArrayList<>();

    for (int i = 0; i < listOfFiles.length; i++) {
        if (listOfFiles[i].isFile()) {
            Adresses.add(listOfFiles[i].getAbsolutePath());
            Names.add(listOfFiles[i].getName());
        }
    }

    StringColumn column0 = StringColumn.create("Names", Names);
    StringColumn column1 = StringColumn.create("Addresses",Adresses);

    Table t = Table.create();

    t.addColumns(column0);
    t.addColumns(column1);

    t.write().csv("C:\\Users\\user\\Desktop\\Dossier\\Floweriest.csv");
}

如果这是您想要做的,您也可以跳过列表,在循环之前创建表,然后使用 .append() 方法将结果直接添加到列中。

最后,几点小问题。 Adresses 拼写错误,在 Java 中,我们几乎从不将变量名大写,只有 Class、Enum 和 Interface 名称。

【讨论】:

  • 好的,谢谢 L.Blanc 这很有帮助。地址拼写错误,检查。先不大写,Names>> namesOfFiles,Check。实际上,循环,我实际上并没有看到它,检查。谢谢。
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 1970-01-01
相关资源
最近更新 更多