Java FileOutputStream Создать файл, если не существует - PullRequest
167 голосов
/ 08 марта 2012

Есть ли способ использовать FileOutputStream таким образом, чтобы, если файл (String filename) не существовал, он создавал его?

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

Ответы [ 9 ]

267 голосов
/ 08 марта 2012

Он выдаст 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); 
42 голосов
/ 04 сентября 2015

Перед созданием файла необходимо создать все родительские каталоги.

Использовать yourFile.getParentFile().mkdirs()

23 голосов
/ 08 марта 2012

Вы можете создать пустой файл независимо от того, существует он или нет ...

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

, если вы хотите оставить файл, если он существует ...

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

Вы будетеполучить исключение FileNotFoundException, только если вы попытаетесь создать файл в каталоге, который не существует.

20 голосов
/ 08 марта 2012
File f = new File("Test.txt");
if(!f.exists()){
  f.createNewFile();
}else{
  System.out.println("File already exists");
}

Передайте это f вашему FileOutputStream конструктору.

15 голосов
/ 09 июля 2016

FileUtils от Apache Commons - довольно хороший способ добиться этого в одной строке.

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

Все вышеперечисленные операции вызовут исключение, если текущему пользователю не разрешено выполнять операцию.

3 голосов
/ 19 августа 2016

Создать файл, если он не существует. Если файл завершается, очистите его содержимое:

/**
 * 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();
    }
}
0 голосов
/ 09 февраля 2019

new FileOutputStream(f) создаст файл в большинстве случаев, но, к сожалению, вы получите FileNotFoundException

если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по любой другой причине

от Javadoc

Другими словами, может быть много случаев, когда вы получите FileNotFoundException, означающее «Не удалось создать файл», но вы не сможете найти причину, по которой создание файла не удалось.

Решение состоит в том, чтобы удалить все вызовы File API и использовать вместо них API-интерфейс Files, поскольку он обеспечивает намного лучшую обработку ошибок. Обычно заменяют любой new FileOutputStream(f) на Files.newOutputStream(p).

В тех случаях, когда вам необходимо использовать File API (поскольку вы используете внешний интерфейс, например, с помощью File), использование Files.createFile(p) является хорошим способом убедиться, что ваш файл создан правильно, а если нет, вы бы знали, почему это не сработало. Некоторые люди прокомментировали выше, что это избыточно. Это правда, но вы получаете лучшую обработку ошибок, которая может быть необходима в некоторых случаях.

0 голосов
/ 14 февраля 2018

Просто предоставление альтернативного способа создания файла, только если не существует, используя путь и файлы.

Path path = Paths.get("Some/path/filename.txt");
Files.createDirectories(path.getParent());
if( !Files.exists(path))
    Files.createFile(path);
Files.write(path, ("").getBytes());
0 голосов
/ 08 марта 2012

Вы можете получить 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

...