繁体   English   中英

Java 导出数组$ArrayList 到 csv

[英]Java Export Arrays$ArrayList to csv

我将在一个简单的数据帧上做一个 Java 库,它可以读取 CSV 文件,编辑 CSV 并导出 ZCC8D68C551C3EAFDZ 文件。 我的问题是如何导出它。
这是我阅读 CSV 文件的方式:

String line;
List dataFrame = new ArrayList();
String filePath = "C:\\Users\\user\\Desktop\\SimpleDataFrame\\src\\Book1.csv";

try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
    while ((line = br.readLine()) != null) {
         List values = Arrays.asList(line.split(String.valueOf(",")));
         dataFrame.add(values);
      }
 } catch (Exception e) {
         System.out.println(e);
 }

这就是我实现写入 CSV 文件的方式:

 FileWriter writer = new FileWriter(new File("Book2.csv"));
 for(int i = 0; i<dataFrame.size(); i++){
     String[] array = (String [])dataFrame.get(i);
     for(int j = 0; j<array.length; j++){
         writer.write(array[j]);
         if(j<array.length-1) writer.write(",");
         else writer.write("\n");
     }
 }

这是它向我抛出的异常:

Exception in thread "main" java.lang.ClassCastException: class java.util.Arrays$ArrayList cannot be cast to class [Ljava.lang.String; (java.util.Arrays$ArrayList and [Ljava.lang.String; are in module java.base of loader 'bootstrap')

我能知道是什么问题吗?

在一种方法中,您有:

List values = Arrays.asList(line.split(String.valueOf(",")));
     dataFrame.add(values);

所以这里的值是一个列表

然后在 write 方法中你有:

String[] array = (String [])dataFrame.get(i); 

String[] 与 List 不同,这就是为什么在尝试强制转换时会出错。

如果在顶部你这样做会更好:

  List<String> values = Arrays.asList(line.split(String.valueOf(",")));
     dataFrame.add(values);

添加 generics。 然后在 write 方法中类似于:

List<String> stringList = (List<String>) dataFrame.get(i); //Add generics to data frame here so you don't need that cast!
for(int j = 0; j<stringList.size(); j++){
     writer.write(stringList.get(j));
     if(j<stringList.size()-1) writer.write(",");
     else writer.write("\n");
 }

这里的问题是您使用原始类型。 java 中的列表是通用的,您必须指定要使用的元素类型。 此外,列表不能与 arrays 互换,也不能直接转换为 arrays。

List dataFrame = new ArrayList();

应该触发一个警告,你不应该忽略这个警告。

根据您的使用情况,它必须是

List<List<String>> dataFrame = new ArrayList<>();

这些元素是列表,因为您将它们从 arrays 显式转换为列表

List values = Arrays.asList(line.split(String.valueOf(",")));

String.split返回一个String[] ,您可以使用Arrays.asList将其转换为List

这条线应该是

List<String> values = Arrays.asList(line.split(","));

(这里不需要String.valueOf ,文字已经是String )。

然后在

String[] array = (String [])dataFrame.get(i);

你会得到一个运行时异常,因为dataFrames包含Lists ,而不是 arrays String[] 这可以重写为,例如使用增强的 for 循环和String.join ,并将编写writer包装在 try-with-resources 中,这样您就不会忘记关闭它。

try (FileWriter writer = new FileWriter(new File("Book2.csv"))) {
    for (List<String> list : dataFrame) {
        writer.write(String.join(",", list));
        writer.write("\n");
    }
} catch (IOException e) {
    e.printStackTrace();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM