【问题标题】:Why doesn't my programme write data to a text file?为什么我的程序不将数据写入文本文件?
【发布时间】:2013-10-29 11:47:13
【问题描述】:

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

【问题讨论】:

  • 汉明类有什么作用?
  • @RossWilliamDrew,它计算两个字符串之间的汉明距离

标签: java exception file-io


【解决方案1】:

您的代码有点混乱,难以理解。我会写得更像这样:

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
        }
    }
}

【讨论】:

    【解决方案2】:

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

    outputFile.flush(); 
    

    如果内容没有放入第二个文件,可能就是您要查找的内容。

    【讨论】:

      【解决方案3】:

      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");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-12-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-04
        • 1970-01-01
        相关资源
        最近更新 更多