2016-02-27 64 views
-2

我正在使用watchservice實現csv文件偵聽器。我的要求是: 使用java watch service從註冊目錄中獲取csv文件。我正在努力處理收到的文件並將數據存儲到數據庫中。這裏的問題是 - CSV文件格式不是預定義的,文件可以有任意數量的列和不同的標題。我提到了很多網站,但沒有找到任何解決方案。請幫忙。如何在java中讀取不同格式的多個csv文件

+0

你可以分享你到目前爲止試過的代碼嗎? –

+1

如果文件格式完全是任意的,則不能用泛型代碼對其進行有意義的處理。你可以做的一件事是手動逐行解析文件,並在','上分割並在無限循環中執行,直到達到文件結束。 – prabugp

回答

1

此示例代碼可以幫助你處理你的文件:

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

public class Main { 
    private static String HEADER_DELIMITER = ","; 
    private static String DATA_DELIMITER = ","; 

    public static void main(String[] args) { 
     /** 
     * for each file read lines and then ... 
     */ 
     String headerLine = "id,name,family"; 
     String[] otherLines = { "1,A,B", "2,C,D" }; 
     List<Student> students = new ArrayList<Student>(); 
     String[] titles = headerLine.split(HEADER_DELIMITER); 
     for (String line : otherLines) { 
      String[] cells = line.split(DATA_DELIMITER); 
      Student student = new Student(); 
      int i = 0; 
      for (String cell : cells) { 
       student.add(titles[i], cell); 
       i++; 
      } 
      students.add(student); 
     } 
     System.out.println(students); 
     /* 
     * output: 
     * [Student [data={id=1, family=B, name=A}], Student [data={id=2, family=D, name=C}]] 
     */ 

     /** 
     * save students in your table. 
     */ 
    } 

    static class Student { 
     Map<String, String> data = new HashMap<String, String>(); 

     public void add(String key, String value) { 
      data.put(key, value); 
     } 

     @Override 
     public String toString() { 
      return "Student [data=" + data + "]"; 
     } 
    } 
} 

用於保存結果數據的基礎上,這取決於你對自己的數據模型的決定。例如,如果這些csv文件在大多數列中很常見,並且在幾列中不同,我建議使用以下數據模型:

您應該有一個包含公共列(id,name,family)的表(例如Student)和另一個列只有3列的表(studentForeignKey,key,value),並在此表中存儲其他額外的列。例如(id = 1,key = activity,value = TA),這意味着id = 1的學生有TA活動。

我希望這個答案可以幫到你