CreateNewFile () do Java - também criará diretórios?

87

Eu tenho uma condição para verificar se um determinado arquivo existe antes de prosseguir ( ./logs/error.log). Se não for encontrado, quero criá-lo. No entanto,

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

também criar logs/se não existir?

n0pe
fonte

Respostas:

190

Não.
Use tmp.getParentFile().mkdirs()antes de criar o arquivo.

Jtahlborn
fonte
Opa. Eu estava usando "tmp.mkdirs ()". É por isso que meu arquivo estava sendo criado como uma pasta
GabrielBB
20
File theDir = new File(DirectoryPath);
if (!theDir.exists()) theDir.mkdirs();
Eng.Fouad
fonte
6
Proponho usar "mkdirs" em vez de "mkdir" para que seu código também possa criar pastas pai não existentes :)
Nimpo
14
File directory = new File(tmp.getParentFile().getAbsolutePath());
directory.mkdirs();

Se os diretórios já existirem, nada acontecerá, então você não precisa de verificações.

Jake Roussel
fonte
9

Estilo Java 8

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

Para escrever no arquivo

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

Ler

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

Exemplo completo

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();
        }
    }
}
ahmet
fonte
3

StringUtils.touch(/path/filename.ext) agora (> = 1.3) também criará o diretório e o arquivo se eles não existirem.

NathanChristie
fonte
1
Perdoe o comentário tardio, mas agora deve serFileUtils.touch(new File(file_path))
shark1608
0

Não, e se logsnão existir você receberájava.io.IOException: No such file or directory

Curiosidade para desenvolvedores de Android: liga para usuários semelhantes Files.createDirectories()e Paths.get()funcionaria no suporte ao min api 26.

Alejandra
fonte