Frage

Gibt es trotzdem in Java, um herauszufinden, ob der angegebene Pfad absolut ist oder nicht, unabhängig von der Plattform das Programm gerade läuft. Also, was ich will, ist wahrscheinlich so etwas wie das folgende Beispiel:

Unter Linux:

new File("/home/").isAbsolute() // Should return true.
new File("C:/My Documents").isAbsolute() // Should *also* return true.

Unter Windows:

new File("C:/Documents").isAbsolute() // Should return true.
new File("/home/").isAbsolute() // Should *also* return true.

Ich kann wahrscheinlich Code etwas damit zu umgehen, aber ich wollte nur, um herauszufinden, ob jemand eine Klasse in Java zur Verfügung gestellt eingebaut kannte dieses Problem zu lösen. Oder hat jemand schon einmal dieses Problem kommen? Und wie haben Sie es lösen?

Danke!

War es hilfreich?

Lösung

Nein.

Es gibt einige zugrunde liegenden Filesystem Klassen (das ist Java 7, aber sie existieren sowohl vor als auch) daran, die isAbsolute () aussetzen, aber sie sind nicht öffentlich - so Sie nicht sie verwenden, und selbst wenn Sie Ihren Code tun, würde die Reflexion Junk voll sein - und nur die „richtigen“ OS diejenigen sind in der JRE enthalten, so dass Sie müssten, um sie codieren sowieso.

Hier sind die Java 7 Implementierungen von isAbsolute (...) zum Einstieg. Beachten Sie, dass File.getPrefixLength () ist Paket-private.

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);
}

Andere Tipps

In Java 7:

new File(path).isAbsolute()

Mein Riss an diesem mit Apache FilenameUtil -

   public static boolean isAbsolute(final String path) {
      return FilenameUtils.getPrefixLength(path) != 0;
   }

Technisch wird diese Rückkehr! Relativ. Welches ist für meine Zwecke gut.

ich am Ende mit diesem (in 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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top