Есть ли способ использовать FileOutputStream таким образом, чтобы, если файл (String filename) не существует, он его создаст?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
java
file
file-io
new-operator
fileoutputstream
Стефан Данн
источник
источник
createNewFile()
метода, как показано в моем примере.createNewFile()
сам атомарно проверяет наличие файла.createNewFile()
здесь пустая трата времени. Система уже сделает это. Вы просто заставляете его смотреть дважды.Перед созданием файла необходимо создать все родительские каталоги.
Использовать
yourFile.getParentFile().mkdirs()
источник
Вы можете создать пустой файл независимо от того, существует он или нет ...
new FileOutputStream("score.txt", false).close();
если вы хотите оставить файл, если он существует ...
new FileOutputStream("score.txt", true).close();
Вы получите исключение FileNotFoundException, только если попытаетесь создать файл в несуществующем каталоге.
источник
FileNotFoundException
в обоих случаях.File f = new File("Test.txt"); if(!f.exists()){ f.createNewFile(); }else{ System.out.println("File already exists"); }
Передайте это
f
своемуFileOutputStream
конструктору.источник
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);
Все вышеупомянутые операции вызовут исключение, если текущему пользователю не разрешено выполнять операцию.
источник
Создайте файл, если он не существует. Если файл закрывается, очистите его содержимое:
/** * 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());
источник
Вы можете потенциально получить,
FileNotFoundException
если файл не существует.В документации по Java говорится:
Если вы используете Java 7, вы можете использовать пакет java.nio:
источник
new FileOutputStream(f)
в большинстве случаев создаст файл, но, к сожалению, вы получите исключение FileNotFoundExceptionиз Javadoc
Другими словами, может быть множество случаев, когда вы получите FileNotFoundException, означающее «Не удалось создать ваш файл», но вы не сможете найти причину, по которой создание файла не удалось.
Решение состоит в том, чтобы удалить любой вызов File API и использовать вместо него Files API, поскольку он обеспечивает гораздо лучшую обработку ошибок. Обычно заменяют любой
new FileOutputStream(f)
наFiles.newOutputStream(p)
.В случаях, когда вам действительно нужно использовать File API (потому что вы используете внешний интерфейс, например, File), использование
Files.createFile(p)
- хороший способ убедиться, что ваш файл создан правильно, и если нет, вы узнаете, почему он не работает. Некоторые люди выше отметили, что это избыточно. Это правда, но вы получаете лучшую обработку ошибок, которая может потребоваться в некоторых случаях.источник