2012-06-26 43 views
5

Tôi đang làm việc trên trình phân tích cú pháp csv, tôi muốn đọc tiêu đề và phần còn lại của tệp csv riêng biệt. Đây là mã của tôi để đọc csv.csv phân tích cú pháp đọc tiêu đề

Mã hiện tại đọc tất cả mọi thứ trong tệp csv, nhưng tôi cần đọc tiêu đề riêng biệt. hãy giúp tôi về việc này.

public class csv { 

private void csvRead(File file) 
{ 
    try 
    { 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    String strLine = ""; 
    StringTokenizer st = null; 
    File cfile=new File("csv.txt"); 
    BufferedWriter writer = new BufferedWriter(new FileWriter(cfile)); 
    int tokenNumber = 0; 

    while((strLine = br.readLine()) != null) 
    { 
      st = new StringTokenizer(strLine, ","); 
      while(st.hasMoreTokens()) 
      { 

        tokenNumber++; 
        writer.write(tokenNumber+" "+ st.nextToken()); 
        writer.newLine(); 
      } 


      tokenNumber = 0; 
      writer.flush(); 
    } 
} 

    catch(Exception e) 
    { 
     e.getMessage(); 
    } 
} 
+1

Nếu bạn muốn tách phần đầu đọc khỏi phần còn lại của tệp, sau đó có phương thức xử lý dòng đầu tiên và phương pháp khác xử lý tất cả các dòng khác trong tệp. –

Trả lời

3

Bạn đã xem OpenCSV chưa?

câu hỏi trước đây ...

CSV API for Java

Hình như bạn có thể chia ra các tiêu đề khá dễ dàng ...

String fileName = "data.csv"; 
CSVReader reader = new CSVReader(new FileReader(fileName)); 


// if the first line is the header 
String[] header = reader.readNext(); 

// iterate over reader.readNext until it returns null 
String[] line = reader.readNext(); 
5

Hãy cân nhắc việc sử dụng Commons CSV. Thư viện này được viết theo số RFC 4180 - Common Format and MIME Type for Comma-Separated Values (CSV) Files. Thế nào là phù hợp để đọc các dòng như:

"aa,a","b""bb","ccc" 

Và việc sử dụng khá đơn giản, đó chỉ là 3 lớp, và tài liệu một mẫu nhỏ theo:

Parsing của một csv-string có các tab như dải phân cách, '"' như một tùy chọn encapsulator giá trị , và bình luận bắt đầu bằng '#':

CSVFormat format = new CSVFormat('\t', '"', '#'); 
Reader in = new StringReader("a\tb\nc\td"); 
String[][] records = new CSVParser(in, format).getRecords(); 

và thêm bạn sẽ có được phân tích cú pháp này đã có sẵn như là hằng số:

  • DEFAULT - Standard dấu phẩy tách ra định dạng như định nghĩa bởi RFC 4180.
  • EXCEL - định dạng tập tin Excel (sử dụng dấu phẩy là dấu phân cách giá trị).
  • MYSQL - Định dạng MySQL mặc định được sử dụng bởi các hoạt động SELECT INTO OUTFILE và LOAD DATA INFILE. TDF - Định dạng phân cách bằng tab.
3

Chúng tôi có phương thức withHeader() có sẵn trong CSVFormat. Nếu bạn sử dụng tùy chọn này thì bạn sẽ có thể đọc tệp bằng các tiêu đề.

CSVFormat format = CSVFormat.newFormat(',').withHeader(); 
Map<String, Integer> headerMap = dataCSVParser.getHeaderMap(); 

sẽ cung cấp cho bạn tất cả các tiêu đề.

public class CSVFileReaderEx { 
    public static void main(String[] args){ 
     readFile(); 
    } 

    public static void readFile(){ 
     List<Map<String, String>> csvInputList = new CopyOnWriteArrayList<>(); 
     List<Map<String, Integer>> headerList = new CopyOnWriteArrayList<>(); 

     String fileName = "C:/test.csv"; 
     CSVFormat format = CSVFormat.newFormat(',').withHeader(); 

      try (BufferedReader inputReader = new BufferedReader(new FileReader(new File(fileName))); 
        CSVParser dataCSVParser = new CSVParser(inputReader, format);) { 

      List<CSVRecord> csvRecords = dataCSVParser.getRecords(); 

      Map<String, Integer> headerMap = dataCSVParser.getHeaderMap(); 
       headerList.add(headerMap); 
       headerList.forEach(System.out::println); 

      for(CSVRecord record : csvRecords){ 
       Map<String, String> inputMap = new LinkedHashMap<>(); 

       for(Map.Entry<String, Integer> header : headerMap.entrySet()){ 
        inputMap.put(header.getKey(), record.get(header.getValue())); 
       } 

       if (!inputMap.isEmpty()) { 
        csvInputList.add(inputMap); 
       } 
      } 

      csvInputList.forEach(System.out::println); 

      } catch (Exception e) { 
      System.out.println(e); 
      } 
    } 
} 
+0

đẹp, rất hay –

Các vấn đề liên quan