Buat seluruh jalur secara otomatis saat menulis ke file baru


246

Saya ingin menulis file baru dengan FileWriter. Saya menggunakannya seperti ini:

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

Sekarang dir1dan dir2saat ini tidak ada. Saya ingin Java membuatnya secara otomatis jika belum ada di sana. Sebenarnya Java harus mengatur seluruh path file jika belum ada.

Bagaimana saya bisa mencapai ini?

Jawaban:


431

Sesuatu seperti:

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

11
Mengapa getParentFile dan bukan hanya mkdir?
sauperl

Apakah ini akan menggantikan folder sebelumnya, jika saya mengeluarkan kembali kode yang sama dengan file saudara berbeda?
surajs1n

1
@ surajs1n: Jika direktori sudah ada, mkdirstidak akan melakukan apa-apa.
Jon Skeet

3
@sauperl: Jika file tersebut belum ada, mkdirs () akan menganggap semua yang ditentukan adalah direktori dan membuatnya seperti itu (baru mengujinya). Dengan menggunakan getParentFile () , Anda meninggalkan pembuatan file itu sendiri ke FileWriter .
h4nek

149

Sejak Java 1.7 Anda dapat menggunakan Files.createFile:

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

4
Penting untuk diingat bahwa jalur relatif dapat menyebabkan pengecualian pointer nol. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag

if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Uji apakah dir sudah ada untuk menghindari kesalahan
Andre Nel

29

Gunakan 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

Gunakan FileUtils untuk menangani semua sakit kepala ini.

Sunting: Misalnya, gunakan kode di bawah ini untuk menulis ke file, metode ini akan 'memeriksa dan membuat direktori induk jika tidak ada'.

openOutputStream(File file [, boolean append]) 

1
Tolong, bisakah Anda lebih spesifik?
Jean

Hai Jean, Diedit. Ada sejumlah metode lain yang berguna di bawah FileUtils. Kelas-kelas IO Apache Commons seperti OIUtils dan FileUtils membuat hidup para pengembang java lebih mudah.
kakacii

1
Saya setuju FileUtils adalah cara yang baik untuk pergi, tetapi saya pikir cara yang lebih mudah untuk ini adalah menggunakan writeStringToFile, bukan openOutputStream. Misalnya file File = File baru ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (file, "foo bar baz", true);
paul

Terima kasih untuk itu . Membuat kode saya jauh lebih bersih sekarang. Tautan ke javadoc baru-baru ini: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.