2016-09-29 60 views
-3

後,下面的代碼不會打印最後一部分的文本文件如下:爲什麼。我

.I 1 
some text 
.I 2 
some text 
.I 3 
some text 
........ 

下面的代碼使用StringBuilder的線追加。下面的代碼拆分上面的文本文件,並找到它時創建多個文件。我

但問題是當我運行的代碼,它不創建文件的最後.I 它有1400。 。所以應該有1400個文本文件。但它產生1399個文本文件。 最新的問題?我找不到問題。

public class Test { 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 
     String inputFile="C:\\logs\\test.txt"; 
    BufferedReader br = new BufferedReader(new FileReader(new File(inputFile))); 
     String line=null; 
     StringBuilder sb = new StringBuilder(); 
     int count=1; 
     try { 
      while((line = br.readLine()) != null){ 
       if(line.startsWith(".I")){ 
        if(sb.length()!=0){ 
         File file = new File("C:\\logs\\DOC_ID_"+count+".txt"); 
         PrintWriter writer = new PrintWriter(file, "UTF-8"); 
         writer.println(sb.toString()); 
         writer.close(); 
         sb.delete(0, sb.length()); 
         count++; 
        } 
        continue; 
       } 
       sb.append(line); 
      } 

      } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
      finally { 
        br.close(); 
      } 
    } 
} 

回答

0

要追加到StringBuilder在你的循環的底部,你用的FileWriter寫完後,這意味着追加到StringBuilder的最後一行將不會被寫入文件:

try { 
    while((line = br.readLine()) != null){ 
     if(line.startsWith(".I")){ 
      if(sb.length()!=0){ 
       File file = new File("C:\\logs\\DOC_ID_"+count+".txt"); 
       PrintWriter writer = new PrintWriter(file, "UTF-8"); 
       writer.println(sb.toString()); 
       writer.close(); 
       sb.delete(0, sb.length()); 
       count++; 
      } 
      continue; 
     } 
     sb.append(line); // here **** 
    } 
} 

我建議你簡化邏輯和代碼:

  • 甚至沒有使用StringBuilder,因爲沒有優勢,這是在當前形勢下使用。只需創建一個字符串。
  • 一定要提取並使用while循環內的所有文本,然後再編寫文本。
0

當您遇到以「.I」開頭的行時,您想要關閉現有文件(如果有)並啓動新文件。其他所有內容都會附加到當前打開的文件中。確保在最後檢查是否有打開的文件並關閉它。

public static void main(String[] args) throws IOException { 
    String inputFile="C:\\logs\\test.txt"; 
    BufferedReader br = new BufferedReader(new FileReader(new File(inputFile))); 
    String line=null; 
    int count=1; 
    try { 
     PrintWriter writer = null; 
     while((line = br.readLine()) != null){ 
      if(line.startsWith(".I")){ 
       if(writer != null) writer.close(); 
       writer = new PrintWriter(file, "UTF-8"); 
      } 
      if(writer != null){ 
       writer.println(line); 
      } 
     } 
     if(writer != null){ 
      writer.close; 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } finally { 
     br.close(); 
    } 
} 
+0

是的,我明白了這一點 –