Java 解析csv文件

    技术2022-05-11  22

    1. package xufei; 2. import java.io.BufferedReader; 3. import java.io.FileInputStream; 4. import java.io.IOException; 5. import java.io.InputStreamReader; 6. import java.util.ArrayList; 7. import java.util.List; 8. import java.util.regex.Matcher; 9. import java.util.regex.Pattern; 10. 11. /* 12. * 文件规则 13. * Microsoft的格式是最简单的。以逗号分隔的值要么是“纯粹的”(仅仅包含在括号之前), 14. * 要么是在双引号之间(这时数据中的双引号以一对双引号表示)。 15. * Ten Thousand,10000, 2710 ,,"10,000","It's ""10 Grand"", baby",10K 16. * 这一行包含七个字段(fields): 17. * Ten Thousand 18. * 10000 19. * 2710 20. * 空字段 21. * 10,000 22. * It's "10 Grand", baby 23. * 10K 24. * 每条记录占一行 25. * 以逗号为分隔符 26. * 逗号前后的空格会被忽略 27. * 字段中包含有逗号,该字段必须用双引号括起来。如果是全角的没有问题。 28. * 字段中包含有换行符,该字段必须用双引号括起来 29. * 字段前后包含有空格,该字段必须用双引号括起来 30. * 字段中的双引号用两个双引号表示 31. * 字段中如果有双引号,该字段必须用双引号括起来 32. * 第一条记录,可以是字段名 33. */ 34. /** 35. 36. * <p>タイトル: xufei.CSVAnalysis.java</p> 37. * <p>説明: </p> 38. * <p>著作権: Copyright (c) 2006</p> 39. * <p>会社名: technodia</p> 40. * @author 徐飞 41. * @version 1.0 42. * createDate Aug 11, 2008 43. * 修正履歴 44. * 修正日 修正者       修正理由 45. */ 46. public class CSVAnalysis { 47. private InputStreamReader fr = null; 48. private BufferedReader br = null; 49. 50. public CSVAnalysis(String f) throws IOException { 51. fr = new InputStreamReader(new FileInputStream(f)); 52. } 53. 54. /** 55. * 解析csv文件 到一个list中 56. * 每个单元个为一个String类型记录,每一行为一个list。 57. * 再将所有的行放到一个总list中 58. * @return 59. * @throws IOException 60. */ 61. public List<List<String>> readCSVFile() throws IOException { 62. br = new BufferedReader(fr); 63. String rec = null;//一行 64. String str;//一个单元格 65. List<List<String>> listFile = new ArrayList<List<String>>(); 66. try { 67. //读取一行 68. while ((rec = br.readLine()) != null) { 69. Pattern pCells = Pattern 70. .compile("(/"[^/"]*(/"{2})*[^/"]*/")*[^,]*,"); 71. Matcher mCells = pCells.matcher(rec); 72. List<String> cells = new ArrayList<String>();//每行记录一个list 73. //读取每个单元格 74. while (mCells.find()) { 75. str = mCells.group(); 76. str = str.replaceAll( 77. "(?sm)/"?([^/"]*(/"{2})*[^/"]*)/"?.*,", "$1"); 78. str = str.replaceAll("(?sm)(/"(/"))", "$2"); 79. cells.add(str); 80. } 81. listFile.add(cells); 82. } 83. } catch (Exception e) { 84. e.printStackTrace(); 85. } finally { 86. if (fr != null) { 87. fr.close(); 88. } 89. if (br != null) { 90. br.close(); 91. } 92. } 93. return listFile; 94. } 95. 96. public static void main(String[] args) throws Throwable { 97. CSVAnalysis parser = new CSVAnalysis("c:/test2.csv"); 98. parser.readCSVFile(); 99. } 100. }


    最新回复(0)