Створюйте весь шлях автоматично під час запису в новий файл


246

Я хочу написати новий файл із FileWriter. Я використовую це так:

FileWriter newJsp = new FileWriter("C:\\user\Desktop\dir1\dir2\filename.txt");

Зараз dir1і в dir2даний час не існує. Я хочу, щоб Java створила їх автоматично, якщо їх ще немає. Насправді Java повинна налаштувати весь шлях до файлу, якщо він ще не існує.

Як я можу цього досягти?

Відповіді:


431

Щось на зразок:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);

11
Чому getParentFile, а не лише mkdirs?
саперль

Чи замінить це попередню папку, якщо я перевидаю той самий код з різним файлом побратимів?
surajs1n

1
@ surajs1n: Якщо каталог вже існує, mkdirsнічого не буде робити.
Джон Скіт

3
@sauperl: Якщо файл ще не існує, mkdirs () буде припускати, що все вказане - це каталог і створює його як такий (тільки тестував його). Використовуючи getParentFile () , ви залишаєте створення самого файлу FileWriter .
h4nek

149

З Java 1.7 ви можете використовувати Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);

4
Важливо пам’ятати, що відносні шляхи можуть спричинити виключення нульових покажчиків. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Маг

if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Перевірте, чи вже існує реж, щоб уникнути помилок
Андре Нель

29

Використання File.mkdirs():

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


4

Використовуйте FileUtils для боротьби з усіма цими головними болями.

Редагувати: Наприклад, використовуйте код нижче для запису у файл, цей метод буде "перевірити та створити батьківський каталог, якщо його не існує".

openOutputStream(File file [, boolean append]) 

1
Будь ласка, чи можете ви бути більш конкретними?
Жан

Привіт Жан, Відредагований. У FileUtils є ціла купа інших корисних методів. Класи IO Apache Commons, такі як OIUtils і FileUtils, полегшують життя розробників Java.
kakacii

1
Я погоджуюся, що FileUtils - це хороший шлях, але я вважаю, що простішим способом для цього є використання WriteStringToFile, а не openOutputStream. Наприклад файл файлу = новий файл ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (файл, "foo bar baz", true);
Павло

Дякую за це . Зараз мій код набагато чистіший. Посилання на останній javadoc: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.