从 Java 中的 URL/Path 中删除文件名

如何从 URL 或字符串中删除文件名?

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

这就是我现在所拥有的,它的工作原理。据我所知,因为我使用“/”,所以它只适用于窗口。我想让它独立于平台


答案 1

考虑使用 org.apache.commons.io.FilenameUtils

您可以使用任何风格的文件分隔符提取基本路径,文件名,扩展名等:

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

windows\system32\
cmd.exe

带网址;String url = "C:/windows/system32/cmd.exe";

它会给;

windows/system32/
cmd.exe

答案 2

通过利用java.nio.file;(afaik在J2SE 1.7之后引入)这只解决了我的问题:

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