2016-06-21 152 views
-1

CSV文件我有一個CSV日誌文件,它包含很多這樣的行:讀取和寫入使用Java

2016-06-21 12:00:00,000 : helloworld: header1=2;header2=6;header=0 

我想他們寫入到一個新的CSV文件。

public void readLogFile() throws Exception 
{ 
    String currentLine = ""; 
    String nextLine = ""; 

    BufferedReader reader = new BufferedReader(new FileReader(file(false))); 
    while ((currentLine = reader.readLine()) != null) 
    { 
     if (currentLine.contains("2016") == true) 
     { 
      nextLine = reader.readLine(); 
      if (nextLine.contains("helloworld") == true) 
      {     
       currentLine = currentLine.substring(0, 23); 
       nextLine = nextLine.substring(22, nextLine.length()); 

       String nextBlock = replaceAll(nextLine); 
       System.out.println(currentLine + " : helloworld: " + nextBlock); 

       String[] data = nextBlock.split(";"); 
       for (int i = 0, max = data.length; i < max; i++) 
       { 
        String[] d = data[i].split("="); 
        map.put(d[0], d[1]); 
       } 
      } 
     } 
    } 
    reader.close(); 
} 

這是我的方法寫的內容:

public void writeContentToCsv() throws Exception 
{ 
    FileWriter writer = new FileWriter(".../file_new.csv"); 
    for (Map.Entry<String, String> entry : map.entrySet()) 
    { 
     writer.append(entry.getKey()).append(";").append(entry.getValue()).append(System.getProperty("line.separator")); 
    } 
    writer.close(); 
} 

這是我想要的輸出:

header1; header2; header3 
2;6;0 
1;5;1 
5;8;8 
... 

目前,CSV文件看起來像這樣(只顯示一個數據集):

header1;4 
header2;0 
header3;0 

任何人都可以幫我修復代碼嗎?

+1

請使用調試器,看看我t出錯了 – Sanjeev

回答

1

創建一個類來存儲標題值,並將其存儲在列表中。迭代列表以保存結果。

當前使用的地圖只能存儲2個值(其被存儲標題的值(命名其相應的值)

map.put(d [0],d [1]); 這裏d [ 0]將頭1和d [1]將是4(但我們只需要4從這裏開始)

class Headervalues { 
    String[] header = new String[3]; 
} 

public void readLogFile() throws Exception 
{ 
    List<HeaderValues> list = new ArrayList<>(); 
    String currentLine = ""; 
    BufferedReader reader = new BufferedReader(new FileReader(file(false))); 
    while ((currentLine = reader.readLine()) != null) 
    { 
     if (currentLine.contains("2016") && currentLine.contains("helloworld")) 
     { 

       String nextBlock = replaceAll(currentLine.substring(22, currentLine.length()); 

       String[] data = nextBlock.split(";"); 
       HeaderValues headerValues = new HeaderValues(); 
       //Assuming data.length will always be 3. 
       for (int i = 0, max = data.length; i < max; i++) 
       { 
        String[] d = data[i].split("="); 
        //Assuming split will always have size 2 
        headerValues.header[i] = d[1]; 
       } 
       list.add(headerValues) 
      } 
     } 
    } 
    reader.close(); 
} 
public void writeContentToCsv() throws Exception 
{ 
    FileWriter writer = new FileWriter(".../file_new.csv"); 
    for (HeaderValues value : headerValues) 
    { 
     writer.append(value.header[0]).append(";").append(value.header[1]).append(";").append(value.header[2]); 
    } 
    writer.close(); 
} 
+0

我需要解決你的建議,但除此之外,它的工作!謝謝你的幫助! – gpuk360

+0

解決方案是提供一個大致的方向,而不是作爲工作示例,因爲我沒有完全意識到整個代碼。我試圖將自己限制在提供的代碼中,只做了很少的修改。謝謝。 – Jaiprakash

1

用於寫入CSV

public void writeCSV() { 

     // Delimiter used in CSV file 
     private static final String NEW_LINE_SEPARATOR = "\n"; 

     // CSV file header 
     private static final Object[] FILE_HEADER = { "Empoyee Name","Empoyee Code", "In Time", "Out Time", "Duration", "Is Working Day" }; 

     String fileName = "fileName.csv"); 
     List<Objects> objects = new ArrayList<Objects>(); 
     FileWriter fileWriter = null; 
     CSVPrinter csvFilePrinter = null; 

     // Create the CSVFormat object with "\n" as a record delimiter 
     CSVFormat csvFileFormat = CSVFormat.DEFAULT.withRecordSeparator(NEW_LINE_SEPARATOR); 

     try { 
      fileWriter = new FileWriter(fileName); 

      csvFilePrinter = new CSVPrinter(fileWriter, csvFileFormat); 

      csvFilePrinter.printRecord(FILE_HEADER); 

      // Write a new student object list to the CSV file 
      for (Object object : objects) { 
       List<String> record = new ArrayList<String>(); 

       record.add(object.getValue1().toString()); 
       record.add(object.getValue2().toString()); 
       record.add(object.getValue3().toString()); 

       csvFilePrinter.printRecord(record); 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       fileWriter.flush(); 
       fileWriter.close(); 
       csvFilePrinter.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }