簡體   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