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?

Respostas:


190

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


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();

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.


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

3

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


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.