为什么我的程序不将数据写入文本文件?

时间:2013-10-29 11:47:13

标签: java exception file-io

程序逐行读取文件 如果程序在行[@: 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]

3 个答案:

答案 0 :(得分: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
        }
    }
}

答案 1 :(得分:0)

我认为将代码放在Catch块中是不好的做法。但是,您是否正在刷新PrintWriter的输出?

outputFile.flush(); 
如果没有将内容放入第二个文件,

可能就是你要找的东西。

答案 2 :(得分:0)

1)删除while循环中的finally块 2)在循环

之后的finally块中添加outputFile.flush()
                //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");