2016-12-06 8 views
-1

私はthrows FileNotFoundExceptionをテストしようとしています。最初に私のexec.txtを自分のプロジェクトフォルダに入れて、"testing"の文字列&をテストしました。プログラムを実行するとうまく動作します。私のキャッチブロックはなぜ機能しませんか?

しかし、mainメソッドのcatch()部分が機能するかどうかを確認するために、私のexec.txtファイルをマイフォルダから削除しましたが、そうではありません。 catch()の部分のFile not foundはコンソールに表示されません。

import java.io.*; 

public class Crashable { 

public static void openFile(String f) throws FileNotFoundException { 
    PrintWriter f1 = new PrintWriter(f); 
    f1.write("testing"); 
    f1.close(); 
} 

public static void main(String[] args) { 
    String f = "exec.txt"; 

    try { 
     openFile(f); 
    } catch(FileNotFoundException e) { 
     System.out.println("File not found"); 
    } 
    } 
} 
+2

再読み込みPrintWriterコンストラクタのドキュメント: "ファイルが存在する場合はゼロサイズに切り捨てられ、それ以外の場合は新しいファイルが作成されます。"例外は、ファイルを作成できない場合にのみスローされます。 – yshavit

答えて

0

文書に述べられているようにファイルがアクセスまたは作成することができなかったとき、FileNotFoundExceptionがスローされます。

にFileNotFoundException - 指定した文字列が既存の、書き込み可能な通常のファイルを示さないと、その名前の新しい通常のファイルを作成することはできません、または

ファイルを開いたり、作成中に他のいくつかのエラーが発生した場合した場合

あなたの場合、新しいファイルが作成される可能性がありますので、例外はスローされません。

0

あなたはそれが存在しないディレクトリにファイルを作成しようとすることでexecptionを投げるために得ることができます:

String f = "zzz/exec.txt" 
0

あなたはopenFile方法で例外をスローすることはありません。 Javaのdocs

公共のPrintWriter(ファイルファイル)から はFileNotFoundExceptionを

をスローし、指定したファイルで、行の自動フラッシュは行わずに、新しいPrintWriterを作成します。この簡易コンストラクタは、 中間OutputStreamWriterを作成します。 を使用して文字をエンコードし、Java仮想マシンのこのインスタンスのデフォルトの文字セットをエンコードします。

パラメータ: file - このライターの宛先として使用するファイル。ファイルが存在する場合、サイズはゼロに切り捨てられます。そうでない場合は、新しい ファイルが作成されます。出力はファイルに書き込まれ、 がバッファされます。

ファイルが存在しない場合は、新しいファイルを作成します。したがって、ファイルは存在しませんが、PrintWriterオブジェクトを作成すると、新しいファイルが作成され、エラーはスローされないため、すべてが機能しています。

0

あなたが実際にコードのこの作品で毎回新しいファイルを作成している:

PrintWriter f1 = new PrintWriter(f); f1.write("testing"); f1.close();

代わりにこれを試してみてください。

public static void openFile(String f) throws FileNotFoundException { 
File file = new File(f); 
if(!file.exists()) 
{ 
    throw new FileNotFoundException(); 
} 
else 
{ 
    //do Something with the file 
}} 

はそれがお役に立てば幸いです。..

関連する問題