Есть ли способ использовать FileOutputStream таким образом, чтобы, если файл (String filename) не существует, он его создаст?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Есть ли способ использовать FileOutputStream таким образом, чтобы, если файл (String filename) не существует, он его создаст?
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);
createNewFile()
, как показано в моем примере.
- person talnicolas; 08.03.2012
createNewFile()
атомарно проверяет наличие файла.
- person aztek; 02.10.2012
createNewFile()
- здесь пустая трата времени. Система уже сделает это. Вы просто заставляете его смотреть дважды.
- person user207421; 15.02.2019
yourFile.getParentFile().mkdirs()
перед yourFile.createNewFile();
, если вы также создаете каталоги.
- person Bruno Bieri; 05.09.2020
createNewFile()
, что здесь излишне и расточительно.
- person user207421; 18.06.2021
Перед созданием файла необходимо создать все родительские каталоги.
Используйте 1_
Обновление: создавайте все родительские папки только тогда, когда их нет. В противном случае в этом нет необходимости.
Вы можете создать пустой файл независимо от того, существует он или нет ...
new FileOutputStream("score.txt", false).close();
если вы хотите оставить файл, если он существует ...
new FileOutputStream("score.txt", true).close();
Вы получите исключение FileNotFoundException, только если попытаетесь создать файл в несуществующем каталоге.
FileNotFoundException
в обоих случаях.
- person mixel; 28.10.2014
File f = new File("Test.txt");
if(!f.exists()){
f.createNewFile();
}else{
System.out.println("File already exists");
}
Передайте этот f
своему FileOutputStream
конструктору.
new FileOutputStream(...)
уже делает это, и теперь вы заставляете его удалить и созданный здесь файл.
- person user207421; 18.06.2021
FileUtils from 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);
Все вышеуказанные операции вызовут исключение, если текущему пользователю не разрешено выполнять операцию.
Создайте файл, если он не существует. Если файл закрывается, очистите его содержимое:
/**
* 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();
}
}
new FileOutputStream(...)
уже делает это, и теперь вы заставляете его удалить и созданный здесь файл.
- person user207421; 18.06.2021
Просто предлагаю альтернативный способ создания файла, только если он не существует, используя путь и файлы.
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(...)
уже делает это, и теперь вы заставляете его удалить и созданный здесь файл.
- person user207421; 18.06.2021
Вы можете потенциально получить 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
new FileOutputStream(f)
в большинстве случаев создает файл, но, к сожалению, вы получите исключение FileNotFoundException.
если файл существует, но является каталогом, а не обычным файлом, не существует, но не может быть создан или не может быть открыт по какой-либо другой причине
Другими словами, может быть множество случаев, когда вы получите FileNotFoundException, означающее «Не удалось создать ваш файл», но вы не сможете найти причину, по которой создание файла не удалось.
Решение состоит в том, чтобы удалить любой вызов File API и использовать вместо него Files API, поскольку он обеспечивает гораздо лучшую обработку ошибок. Обычно заменяйте любой new FileOutputStream(f)
на Files.newOutputStream(p)
.
В случаях, когда вам действительно нужно использовать File API (потому что вы используете внешний интерфейс, например, File), использование Files.createFile(p)
- хороший способ убедиться, что ваш файл создан правильно, и если нет, вы узнаете, почему он не работает . Некоторые люди выше отметили, что это избыточно. Это правда, но вы получаете лучшую обработку ошибок, которая может потребоваться в некоторых случаях.
Files.newOutputStream()
не имеет лучшей обработки ошибок, чем new FileOutputStream
. если вы считаете иначе, пожалуйста, подтвердите свое утверждение.
- person user207421; 18.06.2021