Java解析CSV文件


1、CSV文件是什么


csv(Comma Separate Values)文件即逗號分隔符文件,它是一種文本文件,可以直接以文本打開,以逗號分隔。windows默認用excel打開。它的格式包括以下幾點(它的格式最好就看excel是如何解析的。):

①每條記錄占一行;
②以逗號為分隔符;
③逗號前后的空格會被忽略;
④字段中包含有逗號,該字段必須用雙引號括起來;
⑤字段中包含有換行符,該字段必須用雙引號括起來;
⑥字段前后包含有空格,該字段必須用雙引號括起來;
⑦字段中的雙引號用兩個雙引號表示;
⑧字段中如果有雙引號,該字段必須用雙引號括起來;
⑨第一條記錄,可以是字段名;

2、讀取CSV文件

若記錄中不包含換行符,可直接用BufferedReader來按行來讀取。類似如下:
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(filePath)));
	        String line = null;
	        while ((line = bufferedReader.readLine()) != null) {
	            String[] columns = line.split("\",\"");
	           /* if(columns[0].length() != 14){
	            	//System.out.print(columns[0].length());
	                continue;
	            }*/
}


若記錄中包含換行符,則不能再用上述方式,可以使用 Ostermiller Java Utilities
jar包下載地址:http://ostermiller.org/utils/download.html
示例代碼:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import com.Ostermiller.util.ExcelCSVParser;
import com.Ostermiller.util.LabeledCSVParser;

public class CsvFileParser{   
  
    private static LabeledCSVParser csvParser;//csvParser   
  
    private int currLineNum = -1;//The current line number for reading.   
  
    private String[] currLine = null;//The data of current line.  
 
  
    public CsvFileParser(InputStream in) throws IOException {  
          
            csvParser = new LabeledCSVParser(new ExcelCSVParser(in));  
            currLineNum = csvParser.getLastLineNumber();  
    }  
    
    
    public String[] readLine() throws IOException {  
        currLine = csvParser.getLine();   
  
        currLineNum = csvParser.getLastLineNumber();   
  
        return currLine;  
    }  
      
     
        
        
    public static void main(String args[]) throws Exception{
    	String filePath = "D:\\Pronto_Statistics_2016_03_25_04_07_44.csv";
    	FileInputStream in=new FileInputStream(filePath);
    	CsvFileParser csvReader=new CsvFileParser(in);
    	boolean flag = true;
    	while(flag){
	    	String[] str = csvReader.readLine();
	    	if(str!=null){
	    		for(int i = 0; i<str.length;i++){
		    		System.out.print(str[i]);
		    	}
		    	System.out.println();
	    	}else{
	    		flag=false;
	    	}
	    	
    	}
    	csvParser.close(); 
    	
    }
  
}   

詳細源碼可見:

CSVLexer.lex Source Code :http://ostermiller.org/utils/src/CSVLexer.lex.html

CSVParse.java Source Code:http://ostermiller.org/utils/src/CSVParse.java.html





注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: