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