#Tablesaw #Java 导出到 csv 时,table 只减少到列表的最后一个元素
#Tablesaw #Java When exported to csv, the table is reduce to only the last element of the list
我自学Java,我正在尝试做一些工作程序。
如标题所示,
Table 看起来不错。
但是当我导出到 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();
}
}
正如@fantahirocco 建议的那样,您的 CSV 文件在每次迭代中都会被覆盖。
我不太清楚你要做什么。如果您希望每次迭代都有一个单独的输出文件,则需要为循环中的每次迭代提供一个新的文件名。
如果您尝试使用所有其他文件的数据制作一个输出 CSV 文件,则需要在循环外设置 table 等等。像这样:
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");
}
如果这是您要执行的操作,您也可以跳过列表,在循环之前创建 table,然后使用 .append() 方法将结果直接添加到列中.
最后,几个小问题。地址拼写错误,在 Java 中,我们几乎从不将变量名大写,只有 Class、枚举和接口名称。
我自学Java,我正在尝试做一些工作程序。 如标题所示, Table 看起来不错。 但是当我导出到 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();
}
}
正如@fantahirocco 建议的那样,您的 CSV 文件在每次迭代中都会被覆盖。
我不太清楚你要做什么。如果您希望每次迭代都有一个单独的输出文件,则需要为循环中的每次迭代提供一个新的文件名。
如果您尝试使用所有其他文件的数据制作一个输出 CSV 文件,则需要在循环外设置 table 等等。像这样:
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");
}
如果这是您要执行的操作,您也可以跳过列表,在循环之前创建 table,然后使用 .append() 方法将结果直接添加到列中.
最后,几个小问题。地址拼写错误,在 Java 中,我们几乎从不将变量名大写,只有 Class、枚举和接口名称。