Есть ли способ использовать FileOutputStream таким образом, чтобы, если файл (String filename) не существует, он его создаст?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Есть ли способ использовать FileOutputStream таким образом, чтобы, если файл (String filename) не существует, он его создаст?
FileOutputStream oFile = new FileOutputStream("score.txt", false);
Ответы:
Он выдаст a, 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()
метода, как показано в моем примере.
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 говорится:
Доступен ли файл или может ли он быть создан, зависит от базовой платформы 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)
- хороший способ убедиться, что ваш файл создан правильно, и если нет, вы узнаете, почему он не работает. Некоторые люди выше отметили, что это избыточно. Это правда, но вы получаете лучшую обработку ошибок, которая может потребоваться в некоторых случаях.