web-dev-qa-db-fra.com

Supprimer le nom de fichier d'une URL/chemin en java

Comment supprimer le nom de fichier d'une URL ou d'une chaîne?

String os = System.getProperty("os.name").toLowerCase();
        String nativeDir = Game.class.getProtectionDomain().getCodeSource().getLocation().getFile().toString();

        //Remove the <name>.jar from the string
        if(nativeDir.endsWith(".jar"))
            nativeDir = nativeDir.substring(0, nativeDir.lastIndexOf("/"));

        //Load the right native files
        for(File f : (new File(nativeDir + File.separator + "lib" + File.separator + "native")).listFiles()){
            if(f.isDirectory() && os.contains(f.getName().toLowerCase())){
                System.setProperty("org.lwjgl.librarypath", f.getAbsolutePath()); break;
            }
        }

C'est ce que j'ai en ce moment, et ça marche. D'après ce que je sais, parce que j'utilise "/", cela ne fonctionnera que pour Windows. Je veux le rendre indépendant de la plateforme

12
Yemto

Pensez à utiliser org.Apache.commons.io.FilenameUtils

Vous pouvez extraire le chemin d'accès de base, le nom de fichier, les extensions, etc. avec n'importe quel type de séparateur de fichier:

String url = "C:\\windows\\system32\\cmd.exe";

String baseUrl = FilenameUtils.getPath(url);
String myFile = FilenameUtils.getBaseName(url)
                + "." + FilenameUtils.getExtension(url);

System.out.println(baseUrl);
System.out.println(myFile);

Donne,

windows\system32\
cmd.exe

Avec url; String url = "C:/windows/system32/cmd.exe";

Cela donnerait;

windows/system32/
cmd.exe
15
PopoFibo

Vous utilisez File.separator sur une autre ligne. Pourquoi ne pas l'utiliser aussi pour votre lastIndexOf ()?

nativeDir = nativeDir.substring(0, nativeDir.lastIndexOf(File.separator));
8
Dirk Fauth

En utilisant Java.nio.file ; (afaik introduit après J2SE 1.7) cela résout simplement mon problème:

Path path = Paths.get(fileNameWithFullPath);
String directory = path.getParent().toString();
6
saygley

La bibliothèque standard peut gérer cela à partir de Java 7 

Path pathOnly;

if (file.getNameCount() > 0) {
  pathOnly = file.subpath(0, file.getNameCount() - 1);
} else {
  pathOnly = file;
}

fileFunction.accept(pathOnly, file.getFileName());
3
Jeremy Sigrist

Je résous ce problème en utilisant regex.

Pour les fenêtres:

String path = "";
String filename = "d:\\folder1\\subfolder11\\file.ext";
String regEx4Win = "\\\\(?=[^\\\\]+$)";
String[] tokens = filename.split(regEx4Win);
if (tokens.length > 0)
   path = tokens[0]; // path -> d:\folder1\subfolder11
0
Ksiądz Pistolet

Au lieu de "/", utilisez File.separator . Il s’agit de / ou \, selon la plate-forme. Si cela ne résout pas votre problème, utilisez FileSystem.getSeparator() : vous pouvez transmettre différents systèmes de fichiers au lieu du système par défaut.

0
Chthonic Project