ファイル(String filename)が存在しない場合は、それを作成するという方法でFileOutputStreamを使用する方法はありますか?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
ファイルが存在せず、作成できない場合(FileNotFoundException
)をスローします( doc )。できれば作成します。 FileOutputStream
を作成する前にファイルが存在することを最初にテストする必要があることを確実にするために(そして存在しない場合はcreateNewFile()
で作成します):
File yourFile = new File("score.txt");
yourFile.createNewFile(); // if file already exists will do nothing
FileOutputStream oFile = new FileOutputStream(yourFile, false);
ファイルを作成する前に、親のディレクトリをすべて作成する必要があります。
yourFile.getParentFile().mkdirs()
を使う
あなたはそれが存在するかどうかにかかわらず、空のファイルを作成することができます...
new FileOutputStream("score.txt", false).close();
ファイルが存在する場合にそのファイルを残したい場合.
new FileOutputStream("score.txt", true).close();
存在しないディレクトリにファイルを作成しようとした場合にのみFileNotFoundExceptionが発生します。
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
このf
をFileOutputStream
コンストラクタに渡します。
Apache commonsのFileUtils は、これを一行で実行するための非常に良い方法です。
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();
}
}
パスとファイルを使用してファイルが存在しない場合にのみファイルを作成するための代替方法を提供するだけです。
Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
Files.createFile(path);
Files.write(path, ("").getBytes());
ほとんどの場合、new FileOutputStream(f)
はファイルを作成しますが、残念ながらFileNotFoundExceptionが発生します。
ファイルが存在するが通常のファイルではなくディレクトリである場合、存在しないが作成できない、またはその他の理由で開くことができない場合
Javadocの
つまり、FileNotFoundExceptionが「ファイルを作成できませんでした」という意味で表示されることは多くありますが、ファイルの作成が失敗した原因を突き止めることはできません。
解決策は、File APIへの呼び出しをすべて削除し、代わりにFiles APIを使用することです。これにより、エラー処理が大幅に向上します。通常、すべてのnew FileOutputStream(f)
をFiles.newOutputStream(p)
に置き換えます。
File APIを使用する必要がある場合(例えばFileを使用して外部インターフェースを使用するため)、Files.createFile(p)
を使用するのはファイルが正しく作成されていることを確認するのに良い方法です。 。何人かの人々は、これは冗長であると上でコメントしました。それは本当ですが、場合によっては必要になるかもしれないより良いエラー処理を得ます。
ファイルが存在しない場合は、潜在的にFileNotFoundException
を取得できます。
Javaのドキュメントにはこう書かれています。
ファイルが使用可能かどうか、または作成できるかどうかは、基礎となるプラットフォームによって異なります http://docs.Oracle.com/javase/7/docs/api/Java/io/FileOutputStream.html
Java 7を使用している場合は、Java.nioパッケージを使用できます。
Optionsパラメータはファイルの作成方法や開き方を指定します。書き込みのためにファイルを開きます。ファイルが存在しない場合は作成します。
http://docs.Oracle.com/javase/7/docs/api/Java/nio/file/Files.html