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
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
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));
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();
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());
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
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.