2012-12-03 95 views
0

我有一個CSV文件(excel)裏面有數據,我需要使用java解析數據。 這些文件中的數據不使用逗號分隔,CSV文件具有寫入所有數據的列數和行數(每個單元都有數據)。 我需要通過所有的文件,直到我到達每個文件的EOF(文件結尾)並解析數據。 該文件還包含空行,因此空行不是停止解析的標準,我認爲只有EOF將表明我已達到特定文件的末尾。如何解析Java中的CSV(excel,不以逗號分隔)文件?

非常感謝。

+1

嘗試http://opencsv.sourceforge.net/ – onon15

+1

這會是很難幫助,如果你不告訴我們什麼yoou已經試過嗎?如果文件不是以逗號分隔的,那麼由哪個其他字符?「;」 「標籤」等? – Romczyk

+1

請編輯你的文章,並添加一些示例輸入(縮進4個空格,使他們固定寬度) –

回答

2

您可以使用opencsv解析excel的CSV。我自己使用這個,你所需要做的就是拆分';'。空單元格也將被解析。

你可以在這裏找到的信息:http://opencsv.sourceforge.net/

並解析excelCSV你可以這樣做:

CSVReader reader = new CSVReader(new FileReader("yourfile.csv"), ';'); 
+0

Rafael,我如何加載我從sourceforge下載的源代碼(庫)?謝謝 – user1864229

+0

@ user1864229就像你會圖書館一樣?將其放入該項目的庫文件夾中。 – Lyrion

+0

是否有我需要使用的特定文件/文件夾? – user1864229

0

請有Stream對象讀取CSV文件。

FileInputStream fis = new FileInputStream("FileName.CSV"); 

BufferedInputStream bis = new BufferedInputStream(fis); InputStreamReader isr = new InputStreamReader(bis);

閱讀的InputStream對象,並存儲在String對象的文件。

然後使用StringTokenizer,[逗號]作爲分隔符 - >您將得到令牌 請操縱令牌以獲取值。

String str = "This is String , split by StringTokenizer, created by mkyong"; 

StringTokenizer st = new StringTokenizer(str);

System.out.println("---- Split by space ------"); 
    while (st.hasMoreElements()) { 
     System.out.println(st.nextElement()); 
    } 

    System.out.println("---- Split by comma ',' ------"); 
    StringTokenizer st2 = new StringTokenizer(str, ","); 

    while (st2.hasMoreElements()) { 
     System.out.println(st2.nextElement()); 
    } 

感謝,

+0

http://stackoverflow.com/questions/101100/csv-api-for-java – Pavan

+0

Pavan,如果我的工作表中沒有逗號,它會工作嗎? – user1864229

+0

來自[StringTokenizer](http://docs.oracle.com/javase/7/docs/api/java/util/StringTokenizer.html):'StringTokenizer是一個遺留類,由於兼容性原因而被保留,儘管它的使用是不鼓勵的在新代碼中。建議任何尋求此功能的人使用String或java.util.regex包的拆分方法 –

0
從其他建議

除此之外,我會提供Jackson CSV module。 Jackson具有非常強大的數據綁定功能,CSV模塊允許以CSV格式作爲JSON(或XML,YAML和其他支持的格式)的替代方式進行讀取/寫入。因此,除了強大的CSV到/從POJO綁定之外,您還可以在其他數據格式之間進行轉換。

0

假設你有字符串形式的CSV fileContent:

String fileContent; 

通常,CSV fileContent被解析成列表>。

final List<String> rows = new ArrayList<String>(Lists.newArraysList(fileContent.split("[\\r\\n]+"))); 

分割文件爲行列表。 然後使用OpenCSV的CSVParser並解析逗號分隔線進入名單

final CSVParser parser = new CSVParser(); 
final List<List<String>> csvDetails = new ArrayList<List<String>>(); 
    rows.forEach(t -> { 
     try { 
      csvDetails.add(Lists.newArrayList(parser.parseLine(t))); 
      } catch (Exception e) { 
       throw new RunTimeException("Exception occurred while parsing the data"); 
      } 
     }); 
相關問題