2012-04-22 12 views
0

私は、Javaを使用してファイルからテキストを読み取ります。ここに私のコードは次のとおりです。私のコードがファイルのテキストを複製するのはなぜですか?

public void readCurrentPage(){ 
    FileInputStream file = null; 
    BufferedInputStream buff = null; 
    int readByteValue; 
    Exception lastShownException = null; 
    boolean errorShown = false; 
    boolean readOnce; 

    try{ 
     errorShown = false; 
     file = new FileInputStream("/Volumes/Storage Drive/eclipse/workspace/Nicholas Planner/bin/data/test.txt"); 
     buff = new BufferedInputStream(file,8*1024); 
     while (true){ 
      readByteValue = buff.read(); 
      if (readByteValue == -1){ 
       break; 
      } 
      System.out.print((char) readByteValue + " "); 

     } 

    }catch(Exception e){ 
     if(errorShown == false && lastShownException!=e){ 
      JOptionPane.showMessageDialog(null, "There was an error: \n"+e, "Error!", 1); 
      e = lastShownException; 
      errorShown = true; 
     } 

    }finally{ 
     try{ 
      errorShown = false; 
      buff.close(); 
      file.close(); 
     }catch(Exception e){ 
      if(errorShown == false && lastShownException!=e){ 
       JOptionPane.showMessageDialog(null, "There was an error: \n"+e, "Error!", 1); 
       e = lastShownException; 
       errorShown = true; 
      } 
     } 
    } 
} 

これは、ファイルのテキストです:

test 
This is cool! 

私は上記のコードを使用してファイルを読み込み、これまで、これは私が得るものであるとき:

t e s t 
T h i s i s c o o l ! t e s t 
T h i s i s c o o l ! 

私のコードがファイルのテキストを複製するのはなぜですか?

+8

あなたの機能が正常に見えます。問題はあなたがその関数を呼び出す場所かもしれません。 –

+0

@LuiggiMendoza私は関数を使ってメソッドを意味すると思いますか?したがって、あるメソッドでこのコードを使用すると、別の場所で使用するのと異なるでしょうか?私はそれをメソッドの外でどのように使うことができますか? – Cin316

+0

@ paulsm4 'System.out.print()'は読み込まれた文字を印刷するためのものですが、それを2度呼び出すと思われます。そうでない場合は、 'c o o l! 'の前に' t'が表示されます。 –

答えて

0

お気に入りのデバッグツールを使用して、一度に1つずつコードをステップ実行します。私が考えていることの1つは、メソッドを2回呼び出すことです(デバッガを使用すると、問題を特定するのに役立ちます)。これは、jListの値が変更されたイベントなどのスイングイベントの結果としてメソッドが呼び出された場合に発生します(それらは常に私を取得します)。がんばろう!

私はあなたがどんなpaticular理由でそのメソッドを使用する必要があるかどうかわからないんだけど、あなたはまた、Java Helper Libraryからthis methodを試してみてください:

/** 
    * Takes the file and returns it in a string 
    * 
    * @param location 
    * @return 
    * @throws IOException 
    */ 
    public static String fileToString(String location) throws IOException { 
    FileReader fr = new FileReader(new File(location)); 
    return readerToString(fr); 
    } 

    /** 
    * Takes the given resource (based on the given class) and returns that as a string. 
    * 
    * @param location 
    * @param c 
    * @return 
    * @throws IOException 
    */ 
    public static String resourceToString(String location, Class c) throws IOException { 
    InputStream is = c.getResourceAsStream(location); 
    InputStreamReader r = new InputStreamReader(is); 
    return readerToString(r); 
    } 

    /** 
    * Returns all the lines in the scanner's stream as a String 
    * 
    * @param r 
    * @return 
    * @throws IOException 
    */ 
    public static String readerToString(InputStreamReader r) throws IOException { 
    StringWriter sw = new StringWriter(); 
    char[] buf = new char[1024]; 
    int len; 
    while ((len = r.read(buf)) > 0) { 
     sw.write(buf, 0, len); 
    } 
    r.close(); 
    sw.close(); 
    return sw.toString(); 
    } 
+0

これはOPの問題にどのように関連していますか? –

+0

どうしますか? OPの問題はファイルからテキストを読み上げているという印象を受けました。それは私の答えが何をしようとしているのかです... – kentcdodds

+0

OPの問題は、ファイルを読むのではなく、ファイルを2回読むことです。彼がすでにコメントしたように、彼は方法を2回呼びかけていました。 –

関連する問題