我使用了InputStream,並且在解析時,如果在一列中有一個","
,那麼它就認爲它是一個單獨的列。 ex - abc, xyz, "m,n"
然後解析的輸出是abc , xyz, m, n
這裏m和n被視爲單獨的列。如何使用Java中的一些解析器解析低內存中的csv?
回答
我真的很喜歡Apache Commons CSVParser。這幾乎是從他們的用戶指南逐字:
Reader reader = new FileReader("input.csv");
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT);
try {
for (final CSVRecord record : parser) {
final String string = record.get("SomeColumn");
...
}
} finally {
parser.close();
reader.close();
}
這是簡單的,可配置的和麪向行。
你可以這樣配置它:
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader().withDelimiter(';'));
爲了記錄在案,這樣的配置是不必要的,因爲CSVFormat.DEFAULT
工作正是你想要的方式。
這將是我第一次嘗試看它是否適合內存。如果沒有,你可以針對低內存佔用更具體一點嗎?
感謝回覆 CSVParser將整個文件加載到存在問題的內存中。 如果文件大小爲1GB,那麼內存消耗已經是1GB左右。 – somey
@somey CSVParser可以做到這兩點:全部讀入內存,並明智地閱讀記錄。見https://commons.apache.org/proper/commons-csv/apidocs/index.html –
@somey你如何解析它?這部分代碼也可以將內容讀入內存。你能告訴我們你是如何做到的嗎? 此外,你可以連接'jvisualvm',看看究竟是消耗多少內存。也許需要gc運行? –
有很多第三方的CSV解析庫像
我使用UniVocity csv解析器,它非常快速並自動檢測行中的分隔符。你可以通過上面給出的csv庫。
- 1. 針對iPhone的低內存佔用量的CSV解析器
- 2. 使用SAX解析器,如何解析java中的xml文件
- 3. 解析java中的CSV
- 4. Java中支持Unicode的CSV解析器
- 5. 如何使JSON解析器解析java中的elasticsearch映射?
- 6. 使用simle json解析器的java中的JSON解析錯誤
- 7. 用java中的RegEx解析CSV輸入
- 8. 如何使用SAX解析器解析android中的xml?
- 9. 解析CSV文件的Java
- 10. Java中的Ruby解析器
- 11. 的java jsoup解析如何解析HTML
- 12. 如何CSV解析可以利用 - JAVA
- 13. 解析Java中的一行
- 14. 在表單中使用@Parsed註解解析CSV文件 - Univocity解析器
- 15. 解析Bash中的CSV值
- 16. 的Android - 解析使用SAX解析器
- 17. 瞭解Android中的內容解析器
- 18. 通用解析器來解析java中的記錄行
- 19. 如何在BlackBerry中使用SAX解析器解析XML?
- 20. 如何在android中使用sax解析器從sdcard解析xml?
- 21. 如何解析在iphone中使用XML解析器?
- 22. 如何在python中使用minidom解析器解析xml文件
- 23. 如何在iPhone中使用NSXML解析器解析xml數據?
- 24. 解析內存中的zip內的XML
- 25. HTML解析器使用Java
- 26. 在Android中使用SAX解析器解析一些特殊字符
- 27. 如何解析Java中
- 28. 如何解析Java中
- 29. 如何解析Java中
- 30. 解析Java中
也許[java.io.StreamTokenizer](https://docs.oracle.com/javase/8/docs/api/java/io/StreamTokenizer.html)是一種可能性。或者像[JFlex](http://jflex.de)這樣的掃描生成器。但是,您必須知道如何設置CSV文件的語法,他們不是「開箱即用」的解決方案。 –
什麼是您的文件的數據結構,以及解析後應如何處理結果?程序可以消耗多少內存? –
您不需要太多內存來解析CSV。你需要的內存是*存儲*一切。解決方案:不要。一次處理一行。 – EJP