Yeni bir dosyaya yazarken tüm yolu otomatik olarak oluştur


246

İle yeni bir dosya yazmak istiyorum FileWriter. Ben böyle kullanın:

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

Şimdi dir1ve dir2şu anda mevcut değil. Henüz yoksa Java'nın bunları otomatik olarak oluşturmasını istiyorum. Aslında, Java henüz yoksa tüm dosya yolunu ayarlamalıdır.

Bunu nasıl başarabilirim?

Yanıtlar:


431

Gibi bir şey:

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

11
Neden sadece mkdirs değil getParentFile?
16'da sauperl

Aynı kodu farklı kardeş dosyasıyla yeniden yayınlarsam önceki klasörü geçersiz kılacak mı?
surajs1n

1
@ surajs1n: Dizin zaten varsa mkdirshiçbir şey yapmaz.
Jon Skeet

3
@sauperl: Dosya henüz mevcut değilse, mkdirs () belirtilen her şeyin bir dizin olduğunu varsayar ve bu şekilde oluşturur (sadece test etti). GetParentFile () öğesini kullanarak dosyanın kendisinin oluşturulmasını FileWriter'a bırakmış olursunuz .
h4nek

149

Java 1.7'den beri Files.createFile dosyasını kullanabilirsiniz:

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

4
Göreli yolların boş işaretçi istisnasına neden olabileceğini unutmayın. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag

if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); //
Andre Nel

29

Kullanım 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

Tüm bu baş ağrılarını gidermek için FileUtils kullanın .

Düzenleme: Örneğin, bir dosyaya yazmak için aşağıdaki kodu kullanın, bu yöntem 'yoksa ve varsa üst dizini kontrol eder'.

openOutputStream(File file [, boolean append]) 

1
Lütfen, daha açık olabilir misiniz?
Jean

Merhaba Jean, Düzenlendi. FileUtils altında başka birçok yararlı yöntem vardır. OIUtils ve FileUtils gibi Apache Commons IO sınıfları, java geliştiricilerinin hayatını kolaylaştırır.
kakacii

1
FileUtils gitmek için iyi bir yol olduğunu kabul ediyorum, ama bunun daha kolay bir yolu openOutputStream değil writeStringToFile kullanıyor düşünüyorum. Örneğin Dosya dosyası = yeni Dosya ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (dosya, "foo bar baz", true);
paul

Bunun için teşekkürler. Kodumu şimdi daha temiz hale getirdim. Son javadoc'a
Nikhil Sahu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.