it-swarm.com.ru

Java FileOutputStream Создать файл, если не существует

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

FileOutputStream oFile = new FileOutputStream("score.txt", false);
148
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); 
244
talnicolas

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

Используйте yourFile.getParentFile().mkdirs()

28
Kostiantyn Medvid

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

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

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

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

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

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

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

20
Shashank Kadne

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

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

12
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();
    }
}
2
foobarfuu

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

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

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

Решение состоит в том, чтобы удалить любой вызов к API-интерфейсу Файла и использовать 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