2015-09-10 1 views
0

На Linux:Java - Как проверить, если файл имеет заданный родительский каталог

File: /home/user/somedir/myfile.txt 
Dir: /home/user/ 

(привести true)

В Windows:

File: C:\SomeDir1\Dir2\Dir3\myfile.txt 
Dir: C:\SomeDir1 

(привести true)

File: C:\SomeDir1\Dir2\Dir3\myfile.txt 
Dir: C:\SomeDir2\Dir3 

(результат false)

Итак, мне нужно, чтобы убедиться, если указанный файл имеет родительский каталог

У меня есть идея для его осуществления путем преобразования в строку и сравнивая его с помощью символов, но в этом случае Мне нужно заменить все \ на / и добавить / в конце каталога, если его здесь нет, я не уверен, что это лучший способ, но не обезьяна кода. Пожалуйста посоветуйте

+2

Что пример файла без родительский каталог? «C: \ some.txt» или просто «somefile.txt»? –

+0

Только абсолютные пути – bagi

ответ

2

Это должно сделать трюк:

boolean hasParent = new File("path/to/file").getParentFile() != null; 
2

Предполагая, что вы используете Java> = 7, вы можете проверить, если Path имеет родителя с помощью метода Path.getParent(). Этот метод возвращает null, если путь не имеет родителя.

Path path = Paths.get("/home/user/somedir/myfile.txt"); 
boolean hasParent = path.getParent() != null; 

Обратите внимание, что этот метод обрабатывает разделитель пути правильно, dependending на платформе, так что вам не нужно беспокоиться об этом.

Однако, как отмечено в Javadoc, это не проверяет, действительно ли данный Путь существует в файловой системе. Вы можете добавить чек для этого, используя Files.exists(path).

1

getParentFile(). Он возвращает родительский каталог как объект File или null, если этот объект File не имеет родителя.

Например:

import java.io.File; 
public class MainClass { 
    public static void main(String[] a) { 
    File myFile = new File("C:" + File.separator + "jdk1.5.0" + File.separator, "File.java"); 
    System.out.println(myFile.getParentFile()); 
    System.out.println(myFile); 
    } 
} 

Выход -

C: \ jdk1.5.0

C: \ jdk1.5.0 \ File.java

Смежные вопросы