Java'nın createNewFile () - dizinler de oluşturacak mı?


87

Devam etmeden önce belirli bir dosyanın var olup olmadığını kontrol etmem için bir şartım var ( ./logs/error.log). Bulunmazsa onu oluşturmak istiyorum. Ancak, olacak

File tmp = new File("logs/error.log");
tmp.createNewFile();

logs/yoksa da yarat ?

Yanıtlar:


190

Hayır . Dosyayı oluşturmadan önce
kullanın tmp.getParentFile().mkdirs().


Oops. "Tmp.mkdirs ()" kullanıyordum.
Dosyam

20
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();

6
Kodunuzun var olmayan üst klasörler de oluşturabilmesi için "mkdir" yerine "mkdirs" kullanmayı öneriyorum :)
Nimpo

14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

Dizinler zaten mevcutsa, hiçbir şey olmayacak, bu nedenle herhangi bir kontrole ihtiyacınız yok.


9

Java 8 Stili

Path path = Paths.get("logs/error.log");
Files.createDirectories(path.getParent());

Dosyaya yazmak için

Files.write(path, "Log log".getBytes());

Okumak

System.out.println(Files.readAllLines(path));

Tam örnek

public class CreateFolderAndWrite {

    public static void main(String[] args) {
        try {
            Path path = Paths.get("logs/error.log");
            Files.createDirectories(path.getParent());

            Files.write(path, "Log log".getBytes());

            System.out.println(Files.readAllLines(path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3

StringUtils.touch(/path/filename.ext) şimdi (> = 1.3) yoksa dizini ve dosyayı da oluşturacaktır.


1
Geç yorum için FileUtils.touch(new File(file_path))
kusura bakmayın

0

Hayır, logsyoksa alacaksınızjava.io.IOException: No such file or directory

Android geliştiriciler için eğlenceli gerçek: beğenileri çağırır Files.createDirectories()ve Paths.get()min api 26'yı desteklerken işe yarar.

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.