문제

어쨌든 주어진 경로가 현재 실행중인 플랫폼에 관계없이 절대적인지 아닌지 알아 내기 위해 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에서 제공된 내장 클래스를 알고 있는지 알고 싶었습니다. 아니면이 문제가 발생한 적이 있습니까? 그리고 어떻게 해결 했습니까?

감사!

도움이 되었습니까?

해결책

아니요.

기본이 있습니다 파일 시스템 isabsolute ()를 노출시키는 클래스 (Java 7이지만 이전에도 존재 함)이지만 공개적이지 않습니다. 그렇지 않아야합니다 그것들을 사용하고, 당신이 코드를 사용하더라도 반사 정크로 가득 차있을 것입니다.

다음은 Isabsolute (...)의 Java 7 구현이 있습니다. file.getPrefixLength ()는 패키지-프라이버시입니다.

Win32filesystem:

public boolean isAbsolute(File f) 
{
        int pl = f.getPrefixLength();
        return (((pl == 2) && (f.getPath().charAt(0) == slash))
                || (pl == 3));
}

Unixfilesystem:

public boolean isAbsolute(File f) 
{
        return (f.getPrefixLength() != 0);
}

다른 팁

Java 7 :

new File(path).isAbsolute()

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);
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top