web-dev-qa-db-ja.com

Java FileOutputStreamファイルが存在しない場合は作成する

ファイル(String filename)が存在しない場合は、それを作成するという方法でFileOutputStreamを使用する方法はありますか?

FileOutputStream oFile = new FileOutputStream("score.txt", false);
160
Stefan Dunn

ファイルが存在せず、作成できない場合(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); 
261
talnicolas

ファイルを作成する前に、親のディレクトリをすべて作成する必要があります。

yourFile.getParentFile().mkdirs()を使う

39

あなたはそれが存在するかどうかにかかわらず、空のファイルを作成することができます...

new FileOutputStream("score.txt", false).close();

ファイルが存在する場合にそのファイルを残したい場合.

new FileOutputStream("score.txt", true).close();

存在しないディレクトリにファイルを作成しようとした場合にのみFileNotFoundExceptionが発生します。

23
Peter Lawrey
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

このfFileOutputStreamコンストラクタに渡します。

20
Shashank Kadne

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);

現在のユーザーが操作を許可されていない場合、上記の操作はすべて例外をスローします。

13
Nikhil Sahu

ファイルが存在しない場合は作成します。ファイルが存在する場合は、その内容を消去します。

/**
 * 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();
    }
}
3
Do Nhu Vy

パスとファイルを使用してファイルが存在しない場合にのみファイルを作成するための代替方法を提供するだけです。

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());
0
Manish Bansal

ほとんどの場合、new FileOutputStream(f)はファイルを作成しますが、残念ながらFileNotFoundExceptionが発生します。

ファイルが存在するが通常のファイルではなくディレクトリである場合、存在しないが作成できない、またはその他の理由で開くことができない場合

Javadocの

つまり、FileNotFoundExceptionが「ファイルを作成できませんでした」という意味で表示されることは多くありますが、ファイルの作成が失敗した原因を突き止めることはできません。

解決策は、File APIへの呼び出しをすべて削除し、代わりにFiles APIを使用することです。これにより、エラー処理が大幅に向上します。通常、すべてのnew FileOutputStream(f)Files.newOutputStream(p)に置き換えます。

File APIを使用する必要がある場合(例えばFileを使用して外部インターフェースを使用するため)、Files.createFile(p)を使用するのはファイルが正しく作成されていることを確認するのに良い方法です。 。何人かの人々は、これは冗長であると上でコメントしました。それは本当ですが、場合によっては必要になるかもしれないより良いエラー処理を得ます。

0
stackoverflowed

ファイルが存在しない場合は、潜在的に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

0
sikander