Java: Comment savoir si le chemin est absolu quel que soit le système d'exploitation

StackOverflow https://stackoverflow.com/questions/1025285

  •  06-07-2019
  •  | 
  •  

Question

Existe-t-il de toute façon en Java pour savoir si le chemin donné est absolu ou non, quelle que soit la plate-forme que le programme exécute actuellement. Donc, ce que je veux, c'est probablement quelque chose comme l'exemple suivant:

Sous Linux:

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

Sous Windows:

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

Je peux probablement coder quelque chose pour résoudre ce problème, mais je voulais simplement savoir si quelqu'un connaissait une classe intégrée fournie en Java pour résoudre ce problème. Ou est-ce que quelqu'un a déjà rencontré ce problème? Et comment l'avez-vous résolu?

Merci!

Était-ce utile?

La solution

Nope.

Il existe des classes FileSystem sous-jacentes (il s'agit de Java 7, mais ils existent également avant) qui exposent isAbsolute (), mais ils ne sont pas publics - vous ne devriez donc pas les le faire, et même si vous le faisiez, votre code serait plein de fichiers de réflexion - et seulement le " correct " Les systèmes d’exploitation sont inclus dans le JRE, il vous faudra donc toujours coder autour d’eux.

Voici les implémentations de isAbsolute (...) Java 7 pour vous aider à démarrer. Notez que File.getPrefixLength () est package-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);
}

Autres conseils

En Java 7:

new File(path).isAbsolute()

Mon problème avec Apache FilenameUtil -

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

Techniquement, cela revient! relatif. Ce qui me convient parfaitement.

J'ai fini par utiliser ceci (sous 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);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top