Как получить каталог файла с помощью объекта File?


110

Рассмотрим код:

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

testfileэто файл, и он может существовать, а может и не существовать. Я хочу получить каталог c:\\temp\\java\\с помощью Fileобъекта. Как мне это сделать?

Ответы:


170

В любом случае я бы ожидал file.getParent()(или file.getParentFile()) дать вам то, что вы хотите.

Кроме того, если вы хотите , чтобы выяснить , является ли оригинал File действительно существует , и является каталогом, то exists()и isDirectory()есть то , что вы после этого .


9
Используйте file.getParent () осторожно, потому что в некоторых случаях он может вернуть null.
geschema

Ответ @geschema Ponaguynik ниже касается этого
4myle,


15

Если вы сделаете что-то вроде этого:

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

parent будет нулевым.

Итак, чтобы получить каталог этого файла, вы можете сделать следующее:

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

8

Файловый API File.getParent или File.getParentFile должен вернуть вам каталог файла.

Ваш код должен быть таким:

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

Вы можете дополнительно проверить, что ваш родительский файл находится в каталоге, используя File.isDirectory API.

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
Вы не отвечаете на вопрос, для файла это не работает.
toni07

codeокончательный файл file = новый файл ("C: /dev/changeofseasons.mid"); System.out.println («файл существует?» + File.exists ()); System.out.println ("каталог файла:" + file.getAbsolutePath ()); Хорошо, извините за неубедительные отступы, я не думаю, что можно форматировать код в комментариях. Тем не менее, ваш код явно не работает.
toni07

Спасибо, исправлено <! --->
Джигар Джоши

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

Описания нужны.
Halvor Holsten Strand

1
Добро пожаловать в Stack Overflow! В общем, ответы на вопросы кода требуют небольшого пояснения - см. Этот мета- пост на Stackoverflow . В ответе, который вы опубликовали, вам, возможно, потребуется объяснить, что вы пытаетесь дать общий случай и как он соотносится с фактическим сообщением OP. А если серьезно - вы можете подумать, как это будет работать your_file_path = "C:\\testfiles\\temp\\testfile";- я не думаю, что это даст то, на что вы надеетесь.
Джей Ричард Снейп,

Должен быть правильный ответ. Это покажет полный путь к файлу.
Magno C

0

Вы можете использовать это

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

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

Это было бы моим решением


-1

Я нашел это более полезным для получения абсолютного местоположения файла.

File file = new File("\\TestHello\\test.txt");
System.out.println(file.getAbsoluteFile());
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.