Автоматически создавать весь путь при записи в новый файл


person Community    schedule 14.05.2010    source источник


Ответы (5)


Что-то типа:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
person Jon Skeet    schedule 14.05.2010
comment
Почему именно getParentFile, а не только mkdirs? - person sauperl; 11.03.2016
comment
Будет ли он отменять предыдущую папку, если я повторно выдаю тот же код с другим файлом-аналогом? - person surajs1n; 17.11.2019
comment
@ surajs1n: Если каталог уже существует, mkdirs ничего не сделает. - person Jon Skeet; 17.11.2019
comment
@sauperl: если файл еще не существует, mkdirs () будет считать, что все указанное является каталогом, и создаст его как таковой (только что проверил). Используя getParentFile (), вы оставляете создание самого файла FileWriter. - person h4nek; 07.12.2019

Начиная с Java 1.7 вы можете использовать Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);
person cdmihai    schedule 18.10.2013
comment
Важно помнить, что относительные пути могут вызвать исключение нулевого указателя. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent()); - person Mag; 23.05.2017
comment
если (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Проверяем, существует ли уже каталог, чтобы избежать ошибки - person Andre Nel; 14.11.2018
comment
@AndreNel JavaDoc of createDirectories утверждает: В отличие от метода createDirectory, исключение не генерируется, если каталог не может быть создан, поскольку он уже существует. - person Jens Piegsa; 04.07.2021

Используйте 1_:

File dir = new File("C:\\user\\Desktop\\dir1\\dir2");
dir.mkdirs();
File file = new File(dir, "filename.txt");
FileWriter newJsp = new FileWriter(file);
person Armand    schedule 14.05.2010

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

person Marcelo Cantos    schedule 14.05.2010
comment
Это создаст каталог `C: \\ user \ Desktop \ dir1 \ dir2 \ filename.txt`. - person Martin Schröder; 04.09.2013
comment
@ MartinSchröder: Только если вы сохраните компонент имени файла. - person Marcelo Cantos; 10.09.2013

Для обработки всех эти головные боли.

Изменить: например, используйте приведенный ниже код для записи в файл, этот метод будет «проверять и создавать родительский каталог, если он не существует».

openOutputStream(File file [, boolean append]) 
person kakacii    schedule 11.04.2013
comment
Не могли бы вы уточнить? - person Jean; 11.04.2013
comment
Привет, Жан, отредактировано. В FileUtils есть множество других полезных методов. Классы ввода-вывода Apache Commons, такие как OIUtils и FileUtils, упрощают жизнь Java-разработчикам. - person kakacii; 12.04.2013
comment
Я согласен, что FileUtils - хороший способ, но я думаю, что более простой способ - использовать writeStringToFile, а не openOutputStream. Например. Файл файл = новый файл (C: /user/Desktop/dir1/dir2/filename.txt); FileUtils.writeStringToFile (файл, foo bar baz, true); - person paul; 08.08.2013
comment
Спасибо за это . Теперь мой код стал намного чище. Ссылка на недавний javadoc: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/ - person Nikhil Sahu; 09.07.2016