2014-12-04 92 views
-3

[更新]問題是不同的,沒有關於csv文件格式。問 將是「同時採用文件作家寫一個CSV文件的最後幾條記錄 失蹤。在csv文件中寫入超過65535行

在我的Java應用程序,我需要在csv文件追加超過65535行。但只寫65535行在一個表。我沒有用過任何庫。一些最後的記錄丟失。如何解決這個..........

public void writeSubmission(){ 
     try { 
      writer = new FileWriter("res/sample.csv"); 
      writer.append("PhraseId"); 
      writer.append(','); 
      writer.append("Sentiment"); 
      writer.append('\n'); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

public void readTestData(){ 
     String path="res/test.tsv"; 
     Calculation cal=new Calculation(); 
     int counter=0; 
     try { 
      BufferedReader bReader = new BufferedReader(new FileReader(path)); 
      String line; 
      writeSubmission(); 
      bReader.readLine(); 
      while ((line = bReader.readLine()) != null) { 
       String datavalue[] = line.split("\t"); 
       writer.append(datavalue[0]); 
       writer.append(','); 

       try { 
        double value=cal.calculate(datavalue[2]); 
        System.out.println(value); 
        String val; 
        if(value<-0.4) 
        { 
         val="0"; 
        } 
        else if(value>-0.4 && value<-0.1) 
        { 
         val="1"; 
        } 
        else if(value>-0.1 && value<+0.1) 
        { 
         val="2"; 
        } 
        else if(value>+0.1 && value<+0.40) 
        { 
         val="3"; 
        } 
        else{ 
         val="4"; 
        } 
        counter++; 
        writer.append(val); 
       } catch (Exception e) { 
        // TODO Auto-generated catch block 
        System.out.println(e); 
       } 
       writer.append('\n'); 

      } 
      System.out.println(counter); 
      bReader.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      System.out.println(e); 
     } catch (IOException e){ 
      e.printStackTrace(); 
      System.out.println(e); 
     } 

    } 
+3

代碼。我們需要更多的代碼。 – 2014-12-04 22:44:16

+1

你怎麼知道表格中只有65535行?你有沒有試過一個普通的文本編輯器,看看有多少行? – WarrenFaith 2014-12-04 22:46:45

+4

聽起來像它可能會打開在一個老版本的Excel有行限制 – 2014-12-04 22:47:16

回答

0

最後我固定的error.File編碼器在用於代碼推送現有流之後應爲flush。 OR應close它自動flushclose

flush方法刷新輸出流並強制任何緩衝 輸出字節被寫出作家。 flush的一般合約是 調用它表明,如果先前寫入的任何字節有 已通過實現輸出流進行緩衝,則應立即將這些字節 寫入其預期目標。

writer = new FileWriter("res/sample.csv"); 
writer.flush(); 
writer.close(); 
+0

我想你會發現你可以刪除flush()調用,它仍然可以工作。問題是你永遠不會調用'writer.close()',它會自動爲你執行刷新操作。 – 2014-12-04 23:33:02

+0

對我以爲。 Bt在另一個close()調用中困惑 – Burusothman 2014-12-04 23:34:55

3

我覺得你的問題是可能該工具你另一方面開放CSVs不希望超過65535行,而不是Java執行任何操作恩錯了。這是另一端的錯誤,幾乎可以肯定是你的Java代碼。 (FileWriter不會關心人約65535線,例如)。

如果您在使用Excel 2003中,例如,你會看到這個問題:How to get around 64k row limit in Excel

+0

要調試此操作,請在CSV文件中添加一個額外的列,併爲每行增加一個整數。然後使用'head'(顯示前幾行),'tail'(顯示最後幾行)和'wc'(計數行)等工具查看生成的CSV文件。如果你沒有更好的東西,操作系統報告的文件大小也可能是一個指標。 – 5gon12eder 2014-12-04 22:46:45