Crie um caminho inteiro automaticamente ao gravar em um novo arquivo

246

Eu quero escrever um novo arquivo com o FileWriter. Eu uso assim:

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

Agora dir1e dir2atualmente não existem. Eu quero que o Java os crie automaticamente se eles ainda não estiverem lá. Na verdade, o Java deve configurar o caminho completo do arquivo, se ainda não existir.

Como posso conseguir isso?


fonte

Respostas:

431

Algo como:

File file = new File("C:\\user\\Desktop\\dir1\\dir2\\filename.txt");
file.getParentFile().mkdirs();
FileWriter writer = new FileWriter(file);
Jon Skeet
fonte
11
Por que getParentFile e não apenas mkdirs?
sauperl
Ele substituirá a pasta anterior, se eu estiver reemitindo o mesmo código com um arquivo irmão diferente?
surajs1n
1
@ surajs1n: Se o diretório já existir, mkdirsnão fará nada.
Jon Skeet
3
@ sauperl: Se o arquivo ainda não existir, o mkdirs () assumirá que tudo o que está especificado é um diretório e o cria como tal (apenas o testou). Usando getParentFile () , você deixa a criação do próprio arquivo para o FileWriter .
H4nek
149

Desde o Java 1.7, você pode usar o Files.createFile:

Path pathToFile = Paths.get("/home/joe/foo/bar/myFile.txt");
Files.createDirectories(pathToFile.getParent());
Files.createFile(pathToFile);
cdmihai
fonte
4
É importante ter em mente que caminhos relativos podem causar exceção de ponteiro nulo. Path pathToFile = Paths.get("myFile.txt"); Files.createDirectories(pathToFile.getParent());
Mag
if (! Files.exists (pathToFile.getParent ())) Files.createDirectory (pathToFile.getParent ()); // Teste se o dir já existe a erro evitar
Andre Nel
29

Use 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);
Armand
fonte
16

Use File.mkdirs().

Marcelo Cantos
fonte
1
Isso criará um diretório `C: \\ usuário \ Desktop \ dir1 \ dir2 \ filename.txt`.
Martin Schröder
@ MartinSchröder: Somente se você mantiver o componente do nome do arquivo.
Marcelo Cantos
4

Use o FileUtils para lidar com todas essas dores de cabeça.

Edit: Por exemplo, use o código abaixo para gravar em um arquivo, esse método 'verificará e criará o diretório pai, se ele não existir'.

openOutputStream(File file [, boolean append]) 
kakacii
fonte
1
Por favor, você poderia ser mais específico?
Jean
Oi Jean, Editado. Há vários outros métodos úteis no FileUtils. As classes IO do Apache Commons, como OIUtils e FileUtils, facilitam a vida dos desenvolvedores de java.
kakacii
1
Concordo que o FileUtils é um bom caminho a percorrer, mas acho que uma maneira mais fácil de fazer isso é usando writeStringToFile, não openOutputStream. Por exemplo, arquivo file = new File ("C: /user/Desktop/dir1/dir2/filename.txt"); FileUtils.writeStringToFile (arquivo, "foo bar baz", true);
paul
Obrigado por isso. Tornei meu código muito mais limpo agora. Link para javadoc recente: commons.apache.org/proper/commons-io/javadocs/api-2.5/org/…
Nikhil Sahu