2016-09-12 20 views
-1

mainメソッドによって呼び出されるクラスのコンストラクタの内容です。コンソールでテキストファイルではなくコンソールへの書き込みBufferedWriter

File f = null; 
    Scanner s; 
    try { 
     f = new File(getClass().getResource("/LOL.txt").toURI()); 
    } catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 
    try { 
     s = new Scanner(f); 
     while(s.hasNextLine()) System.out.println(s.nextLine()); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    try { 
    FileWriter fw = new FileWriter(f.getAbsoluteFile(), false); 
    BufferedWriter bw = new BufferedWriter(fw); 
    bw.write("LOL"); 
    bw.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

出力:

LOL 

は、ファイルの内容が繰り返しても実行後に変更されません。私のIDEはEclipseです

+0

印刷f.getAbsoluteFile()のtoString()、それはあなたに与えられるものを参照してください。 –

+0

このコードには潜在的なバグがたくさんあります。私はそれらを修正する必要がありますか? –

+0

それらを修正してください –

答えて

1

FileWriterboolean appendに設定してfalseに設定してください。

したがって、指定されたコンストラクタが実行されるたびに同じファイルが書き込まれ、"LOL"がその中に出力されます。

"LOL"を印刷する前に、Scannerが各行を読み取り、それを印刷します。したがって、LOLがシステムに印刷されています。

また、あなたはおそらく、あなたがfinallyブロックでそれらをフラッシュして閉じることができますので、tryブロックのうち、あなたのFileWriterBufferedWriterを宣言したい、注意してください。

+0

私はスキャナの部分を削除しました。コンソールには印刷されませんが、ファイルには書き込まれません。例外なし –

+0

@ARJAVGARGファイルが書き込まれていないことをどのようにテストしていますか? – Mena

+0

私は(実行する前に)Eclipseでそれを閉じて、Windowsエクスプローラ –

0

この投稿には初期の質問のみが含まれていますが、いくつかのリソース関連のバグを避けるために修正されたものはすべてそのままです。これは、Java 6以下を前提としています。私はそうしないでくださいすべてのupvoteを取得するべきではありません

;)

package so39452286; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.Writer; 
import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
    new Main().run(); 
    } 

    public void run() { 
    try { 
     File file = new File(getClass().getResource("/LOL.txt").toURI()); 
     Scanner scanner = null; 
     try { 
     scanner = new Scanner(file); 
     while (scanner.hasNextLine()) { 
      System.out.println(scanner.nextLine()); 
     } 
     } finally { 
     if (scanner != null) { 
      scanner.close(); 
     } 
     } 
     Writer writer = null; // Holds the main resource, not the wrapping ones. 
     try { 
     writer = new FileWriter(file.getAbsolutePath(), false); 
     BufferedWriter bw = new BufferedWriter(writer); 
     bw.write("LOL"); 
     bw.flush(); // You forgot to flush. Ok, close() does it, but it's always better to be explicit about it. 
     } finally { 
     if (writer != null) { 
      writer.close(); 
     } 
     } 
    } catch (Exception e) { 
     // Do something with e. 
     e.printStackTrace(System.err); 
    } 
    } 
} 
+0

LOLLOLをコンソールに印刷 –

+0

それで、それは私のためにうまくいくので、 ... –

+0

私は使用したコード全体をコピー/ペーストしました。 'LOL.txt'には何も入っていないので、最初に私が走ったときに空文字になります。2. LOL'テキスト。 –

関連する問題