[英]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.