2013-10-29 23 views
0

程序逐行讀取文件。
如果程序在一行[@: Object successfully summoned]中找到,它將不會寫入第二個文件。
可能問題出在try/catch/finally部分。我嘗試了很多次更改,但我無法解決問題。爲什麼我的程序沒有將數據寫入文本文件?

這是我編程:

package stringsHerkennen; 

import java.io.BufferedReader; 
import java.io.FileInputStream; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 

public class MC { 

    private static PrintWriter outputFile; 

    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException{ 
     FileInputStream fstream = null; 
     FileWriter fwriter = null; 

     fstream = new FileInputStream("C:\\Users\\Tim\\Documents\\test.txt"); 
     BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
     String strLine; 
     fwriter = new FileWriter("bewerkte log.txt", true); 
     outputFile = new PrintWriter(fwriter); 
     try{ 
      while ((strLine = br.readLine()) !=null) { 
       try{ 
       System.out.println(strLine); 
       String b = strLine; 
       String tokens[] = strLine.split("]: "); 
       String c = tokens[1].toString(); 
       //System.out.println(tokens[1]); 
       Hamming H = new Hamming("[@: Object successfully summoned]", c); 
       int Pi = H.getHammingDistance(); 
       //System.out.println(Pi); 
       if(!(Pi==0)){ 
        //System.out.println("geschreven naar file"); 
        outputFile.println(b); 


        //System.out.println("schrijven naar andere file"); 
       } 
       else{ 
        //System.out.println("niet geschreven naar file"); 

       } 


      //try2 
      } 
       catch(Exception ArrayIndexOutOfBoundsException){ 
        //System.out.println("Schrijven naar File"); 

        outputFile.println(strLine); 

      } 
      finally { 
        if (fstream != null) 
         fstream.close();} 


      } 

      //try1 
     } 
     catch(Exception ArrayIndexOutOfBoundsException){ 
       fstream.close(); 
       br.close(); 
     } 
     finally { 
       if (fstream != null) 
        fstream.close();} 
      System.out.println("klaar"); 


    } 
} 

這是文本文件,要篩選

sun.nio.cs.StreamDecoder.readBytes(Unknown Source) ~[?:1.7.0_13]#- at 
sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[?:1.7.0_13] 
    at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[?:1.7.0_13] 
    at java.io.InputStreamReader.read(Unknown Source) ~[?:1.7.0_13] 
    at java.io.BufferedReader.fill(Unknown Source) ~[?:1.7.0_13] 
    at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_13] 
    at java.io.BufferedReader.readLine(Unknown Source) ~[?:1.7.0_13] 
    at ll.run(SourceFile:78) [minecraft_server.1.7.2.exe:?] 
[15:39:13] [Server thread/INFO]: Starting minecraft server version 1.7.2 
[15:39:13] [Server thread/INFO]: Loading properties 
[15:39:13] [Server thread/INFO]: Default game type: SURVIVAL 
[15:39:13] [Server thread/INFO]: Generating keypair 
[15:39:13] [Server thread/INFO]: Starting Minecraft server on *:25565 
[15:39:13] [Server thread/INFO]: Preparing level "world 3" 
[15:39:13] [Server thread/INFO]: Preparing start region for level 0 
[15:39:14] [Server thread/INFO]: Done (0,820s)! For help, type "help" or "?" 
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:01] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned] 
[17:09:02] [Server thread/INFO]: [@: Object successfully summoned] 
+0

後是什麼海明類做補充outputFile.flush()? –

+0

@RossWilliamDrew,它計算兩個字符串之間的漢明距離 –

回答

0

你的代碼是一個有點混亂和難以遵循。我會寫更多這樣的:

package stringsHerkennen; 

import java.io.*; 


public class MC { 
    /** 
    * @param args 
    * @throws IOException 
    */ 
    public static void main(String[] args) throws IOException { 
     FileInputStream fstream = null; 
     FileWriter fwriter = null; 
     PrintWriter outputFile = null; 

     try { 
      fstream = new FileInputStream("C:\\Users\\Tim\\Documents\\test.txt"); 
      BufferedReader br = new BufferedReader(new InputStreamReader(fstream)); 
      String strLine; 
      fwriter = new FileWriter("bewerkte log.txt", true); 
      outputFile = new PrintWriter(fwriter); 
      while ((strLine = br.readLine()) != null) { 
       String tokens [] = strLine.split("]: "); 
       if ((tokens != null) && (tokens.length > 0)) { 
        Hamming H = new Hamming("[@: Object successfully summoned]", tokens[1]); 
        int Pi = H.getHammingDistance(); 
        if (Pi != 0) { 
         outputFile.println(b); 
        } else { 
        } 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      closeQuietly(outputFile); 
      closeQuietly(fwriter); 
      closeQuietly(fstream); 
     } 
    } 

    public static void closeQuietly(InputStream is) { 
     try { 
      if (is != null) { 
       is.close(); 
      } 
     } catch (IOException e) { 
      // Quietly....log the exception if you like 
     } 
    } 

    public static void closeQuietly(Reader r) { 
     try { 
      if (r != null) { 
       r.close(); 
      } 
     } catch (IOException e) { 
      // Quietly....log the exception if you like 
     } 
    } 

    public static void closeQuietly(Writer w) { 
     try { 
      if (w != null) { 
       w.close(); 
      } 
     } catch (IOException e) { 
      // Quietly....log the exception if you like 
     } 
    } 
} 
0

我相信這是不好的做法將代碼放在Catch塊中執行。但是,您是否正在沖洗PrintWriter的輸出?

outputFile.flush(); 

如果內容沒有放入第二個文件中,可能是您正在查找的內容。

0

1)取出while循環 2)內的finally塊finally塊循環

   //try2 
      } catch (Exception ArrayIndexOutOfBoundsException) { 
       //System.out.println("Schrijven naar File"); 

       outputFile.println(strLine); 

      } 
      //**COMMENT this fstream is being closed in the while loop !!! 

      /*finally { 
       if (fstream != null) 
        fstream.close(); 
      }*/ 


     } 

     //try1 
    } catch (Exception ArrayIndexOutOfBoundsException) { 
     fstream.close(); 
     br.close(); 
    } finally { 
     outputFile.flush(); // ADD THIS TO FLUSH TO DISK 
     if (fstream != null) 
      fstream.close(); 
    } 
    System.out.println("klaar"); 
相關問題