Java: как узнать, является ли путь абсолютным независимо от ОС
есть ли в любом случае в Java, чтобы узнать, является ли данный путь абсолютным или нет, независимо от платформы, на которой работает программа. Итак, то, что я хочу, вероятно, что-то вроде следующего примера:
В Linux:
new File("/home/").isAbsolute() // Should return true.
new File("C:/My Documents").isAbsolute() // Should *also* return true.
На Windows:
new File("C:/Documents").isAbsolute() // Should return true.
new File("/home/").isAbsolute() // Should *also* return true.
Я, вероятно, могу кодировать что-то, чтобы обойти это, но я просто хотел узнать, знал ли кто-нибудь встроенный класс, предоставленный на Java, чтобы решить эту проблему. Или кто-нибудь давай проблема? И как вы ее решили?
спасибо!
4 ответов
Неа.
есть некоторые основные файловой системы классы (это Java 7, но они существуют и до него), которые выставляют isAbsolute (), но они не являются общедоступными - так что вы Не стоит используйте их, и даже если бы вы сделали, ваш код был бы полон мусора отражения - и только "правильные" ОС включены в JRE, поэтому вам все равно придется кодировать вокруг них.
вот реализации Java 7 isAbsolute(...) для начала. Обратите внимание на этот файл.getPrefixLength () является частным пакетом.
public boolean isAbsolute(File f) 
{
        int pl = f.getPrefixLength();
        return (((pl == 2) && (f.getPath().charAt(0) == slash))
                || (pl == 3));
}
public boolean isAbsolute(File f) 
{
        return (f.getPrefixLength() != 0);
}
моя трещина в этом с помощью Apache FilenameUtil -
   public static boolean isAbsolute(final String path) {
      return FilenameUtils.getPrefixLength(path) != 0;
   }
технически это возвращение !родственник. Что прекрасно для моих целей.
Я закончил использовать это (в Java 6):
private static boolean testPath(String path) {
    int prefixLen = FilenameUtils.getPrefixLength(path);
    if (testPathWin(path, prefixLen) || testPathLinux(prefixLen))
        return true;
    else
        return false;
}
private static boolean testPathWin(String path, int prefixLen) {
    if (prefixLen == 3)
        return true;
    File f = new File(path);
    if ((prefixLen == 2) && (f.getPath().charAt(0) == '/'))
        return true;
    return false;
}
private static boolean testPathLinux(int prefixLen) {
    return (prefixLen != 0);
}