2012-03-23 15 views
0

収集したデータのテキストログを保持する簡単なプログラムを作成しようとしています。これを設定するには、私は次のコードは、プログラムの開始時に実行した(ログファイルを設定するには、ツールはそれを使用する):私はこれを実行するとJavaファイルIOの例外

File logFile = new File("logs/logFile.txt"); 
FileWriter fw; 
FileReader fr; 
BufferedWriter writer; 
BufferedReader reader; 

public void someMethod(){ 
    System.out.println(logFile.getAbsolutePath()); 
    try{ 
     logFile.createNewFile(); 
    }catch(Exception e){ 
     System.err.println("WARNING: CANNOT CREATE FILE"); 
    } 
    try{ 
     fw = new FileWriter("plugins/Stalker/log.txt"); 
     fr = new FileReader("plugins/Stalker/log.txt"); 
     writer = new BufferedWriter(fw); 
     reader = new BufferedReader(fr); 
    } catch(Exception e){ 
     System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE"); 
    } 
} 

は、私は両方の例外をヒット。最初のprintlnで指定されたパスにファイルまたはフォルダ(ログ)を作成しません。パスは私が期待しているとおりで、私はそのディレクトリに対する書き込み権限を持っているべきです(私は、他のプログラムがログなどを定期的にログに書き込むということを知っています)...私は少しファイルを使って作業しました前に、しかしそれは少し、私はここで完全な損失になっています。

どのような種類の問題が発生している可能性がありますか?これを修正しようとするとどう思いますか?

+0

ここにlogcat出力を貼り付けてください – Nav

+0

実行している問題は例外に含まれており、印刷するだけで済みます。 catchブロックで 'e.printStackTrace()'を使用してください。 – TPete

+0

絶対パスは存在しますか?あなたはUnixのようなOSを実行していますか? – Andreas

答えて

2

フォルダを操作するときは、フォルダが存在することを確認する必要があります。

そのためには、logFile.createNewFile();の前に条件を記述して、createNewFildがフォルダを作成しないためにフォルダが存在するかどうかをチェックする必要があります。

このようにプログラムを少し修正する必要があります。あなたはそれが存在するかどうかをテストするためにFileで利用可能exists方法を使用することができます

File logFileFolder = new File("logs"); 
File stalkerFolder = new File("plugins/Stalker"); 
File logFile = new File("logs/logFile.txt"); 
FileWriter fw; 
FileReader fr; 
BufferedWriter writer; 
BufferedReader reader; 

public void someMethod(){ 
    System.out.println(logFile.getAbsolutePath()); 
    try{ 
     if (!logFileFolder.exists()){ 
      // Create folder if does not exist 
      logFileFolder.mkdir(); 
     } 
     logFile.createNewFile(); 
    }catch(Exception e){ 
     System.err.println("WARNING: CANNOT CREATE FILE"); 
    } 
    try{ 
     if (!stalkerFolder.exists()){ 
      // Create folders if does not exist 
      stalkerFolder.mkdirs(); 
     } 
     fw = new FileWriter("plugins/Stalker/log.txt"); 
     fr = new FileReader("plugins/Stalker/log.txt"); 
     writer = new BufferedWriter(fw); 
     reader = new BufferedReader(fr); 
    } catch(Exception e){ 
     System.err.println("ERROR: CANNOT READ OR WRITE TO LOG FILE"); 
    } 
} 
+0

それでした。ありがとうございました。 – Porthos3

0

正しく覚えていれば、まだ存在しない場合はFileWriterがファイルを作成します。追加する他のコンストラクタを確認してください。

しかし、あなたが直面している問題は、ファイルを読み込もうとする前に、ファイルの書き込みを閉じていないためです。 INORDERはストリームにフラッシュする

は、あなたはラビンドラGullapalliが述べたように、あなたはまた、フォルダにファイルを作成する前に存在するかどうかを確認する必要があり、さらにclose

を呼び出す必要があります。そうでない場合は、mkdirsメソッドを使用して作成する必要があります。

関連する問題