回答:
FileNotFoundException
ファイルが存在せず作成できない場合(doc)はスローされますが、可能であれば作成されます。を作成する前に、ファイルが存在するかどうかを最初にテストする必要があります(存在しない場合はFileOutputStream
、withで作成しますcreateNewFile()
)。
File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing
FileOutputStream oFile = new FileOutputStream(yourFile, false);
createNewFile()
メソッドに追加しました(私の例を参照)。
createNewFile()
ここでの時間の無駄は全部です。システムはすでにそれを行います。あなたはそれを二度見させるだけです。
ファイルを作成する前に、すべての親のディレクトリを作成する必要があります。
使用する yourFile.getParentFile().mkdirs()
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
これf
をFileOutputStream
コンストラクタに渡します。
Apache CommonsのFileUtilsは、これを1行で実現するためのかなり良い方法です。
FileOutputStream s = FileUtils.openOutputStream(new File("/home/nikhil/somedir/file.txt"))
これにより、存在しない場合は親フォルダーが作成され、存在しない場合はファイルが作成され、ファイルオブジェクトがディレクトリであるか、書き込みができない場合は例外がスローされます。これは次と同等です:
File file = new File("/home/nikhil/somedir/file.txt");
file.getParentFile().mkdirs(); // Will create parent directories if not exists
file.createNewFile();
FileOutputStream s = new FileOutputStream(file,false);
現在のユーザーが操作の実行を許可されていない場合、上記の操作はすべて例外をスローします。
存在しない場合はファイルを作成します。ファイルが存在する場合は、その内容をクリアします。
/**
* Create file if not exist.
*
* @param path For example: "D:\foo.xml"
*/
public static void createFile(String path) {
try {
File file = new File(path);
if (!file.exists()) {
file.createNewFile();
} else {
FileOutputStream writer = new FileOutputStream(path);
writer.write(("").getBytes());
writer.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
FileNotFoundException
ファイルが存在しない場合は、潜在的にを取得できます。
Javaドキュメントは言う:
ファイルが利用可能であるか、作成される可能性があるかは、基盤となるプラットフォームhttp://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.htmlによって異なり ます
Java 7を使用している場合は、java.nioパッケージを使用できます。
オプションパラメータは、ファイルの作成またはオープン方法を指定します...書き込み用にファイルをオープンし、存在しない場合はファイルを作成します...
http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html
new FileOutputStream(f)
ほとんどの場合ファイルを作成しますが、残念ながらFileNotFoundExceptionが発生します
ファイルは存在するが、通常のファイルではなくディレクトリである、存在しないが作成できない、またはその他の理由で開けない場合
つまり、「ファイルを作成できませんでした」という意味のFileNotFoundExceptionが発生するケースはたくさんありますが、ファイルの作成が失敗した理由を見つけることはできません。
解決策は、File APIへの呼び出しをすべて削除し、代わりにFiles APIを使用することです。これにより、エラー処理が大幅に向上します。典型的には、任意に置き換えるnew FileOutputStream(f)
とFiles.newOutputStream(p)
。
File APIを使用する必要がある場合(たとえば、Fileを使用して外部インターフェースを使用するため)、ファイルをFiles.createFile(p)
適切に作成するために使用することは適切な方法であり、そうでない場合は、それが機能しない理由を知ることができます。一部の人々は、これは冗長であると上記でコメントしました。それは本当ですが、場合によっては必要になるかもしれないより良いエラー処理が得られます。