Como obtenho o diretório de um arquivo usando o objeto File?


110

Considere o código:

File file = new File("c:\\temp\\java\\testfile");

testfileé um arquivo e pode ou não existir. Quero obter o diretório c:\\temp\\java\\usando o Fileobjeto. Como faço para fazer isso?

Respostas:


170

Em qualquer dos casos, espero file.getParent()(ou file.getParentFile()) dar-lhe o que deseja.

Além disso, se você quiser descobrir se o original File não existe e é um diretório, em seguida, exists()e isDirectory()é o que você está depois.


9
Use file.getParent () com cuidado, porque ele pode retornar nulo em alguns casos.
geschema

A resposta de @geschema Ponaguynik abaixo aborda isso
4myle


14

Se você fizer algo assim:

File file = new File("test.txt");
String parent = file.getParent();

parent será nulo.

Portanto, para obter o diretório desse arquivo, você pode fazer o seguinte:

parent = file.getAbsoluteFile().getParent();

8

File API File.getParent ou File.getParentFile deve retornar o diretório do arquivo.

Seu código deve ser assim:

    File file = new File("c:\\temp\\java\\testfile");
    if(!file.exists()){
        file = file.getParentFile();
    }

Além disso, você pode verificar se o arquivo principal está no diretório usando a API File.isDirectory

if(file.isDirectory()){
    System.out.println("file is directory ");
}

4
File directory = new File("Enter any 
                directory name or file name");
boolean isDirectory = directory.isDirectory();
if (isDirectory) {
  // It returns true if directory is a directory.
  System.out.println("the name you have entered 
         is a directory  : "  +    directory);  
  //It returns the absolutepath of a directory.
  System.out.println("the path is "  + 
              directory.getAbsolutePath());
} else {
  // It returns false if directory is a file.
  System.out.println("the name you have
   entered is a file  : " +   directory);
  //It returns the absolute path of a file.
  System.out.println("the path is "  +  
            file.getParent());
}

1
Você não responde à pergunta, isso não funciona para um arquivo.
toni07

codeArquivo final = novo arquivo ("C: /dev/changeofseasons.mid"); System.out.println ("arquivo existe?" + Arquivo.exists ()); System.out.println ("diretório do arquivo:" + file.getAbsolutePath ()); Ok, desculpe pelo recuo coxo, eu não acho que seja possível formatar o código nos comentários. Ainda assim, seu código obviamente não funciona.
toni07

Obrigado, corrigido <! --->
Jigar Joshi

3
File filePath=new File("your_file_path");
String dir="";
if (filePath.isDirectory())
{
    dir=filePath.getAbsolutePath();
}
else
{
    dir=filePath.getAbsolutePath().replaceAll(filePath.getName(), "");
}

São necessárias descrições.
Halvor Holsten Strand,

1
Bem-vindo ao Stack Overflow! Em geral, as respostas do código precisam de uma pequena explicação - veja esta meta postagem Stackoverflow . Com a resposta que você postou, talvez você precise explicar que está tentando apresentar um caso geral e como ele se relaciona com a postagem real do OP. Mais a sério - você pode querer considerar como funcionaria your_file_path = "C:\\testfiles\\temp\\testfile";- não acho que daria o que você espera.
J Richard Snape,

Deve ser a resposta correta. Isso mostrará o caminho completo para o arquivo.
Magno C

0

Você pode usar isso

 File dir=new File(TestMain.class.getClassLoader().getResource("filename").getPath());

0
String parentPath = f.getPath().substring(0, f.getPath().length() - f.getName().length()); 

Esta seria a minha solução


-1

Achei isso mais útil para obter a localização absoluta do arquivo.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
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.