如何从网址或字符串中删除文件名?
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;
}
}
这就是我现在所拥有的,而且它有效。据我所知,因为我使用“/”它只适用于Windows。我想让它独立于平台
答案 0 :(得分:16)
考虑使用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
用url; String url = "C:/windows/system32/cmd.exe";
它会给;
windows/system32/
cmd.exe
答案 1 :(得分:8)
您正在另一行使用File.separator。为什么不将它也用于你的lastIndexOf()?
nativeDir = nativeDir.substring(0, nativeDir.lastIndexOf(File.separator));
答案 2 :(得分:8)
利用 java.nio.file ; (在J2SE 1.7之后引入afaik)这简单地解决了我的问题:
Path path = Paths.get(fileNameWithFullPath);
String directory = path.getParent().toString();
答案 3 :(得分:3)
从Java 7开始,标准库可以处理此问题
Path pathOnly;
if (file.getNameCount() > 0) {
pathOnly = file.subpath(0, file.getNameCount() - 1);
} else {
pathOnly = file;
}
fileFunction.accept(pathOnly, file.getFileName());
答案 4 :(得分:1)
File file = new File(path);
String pathWithoutFileName = file.getParent();
其中路径可能是“ C:\ Users \ userName \ Desktop \ file.txt”
答案 5 :(得分:0)
使用File.separator
代替“/”。它可以是/
或\
,具体取决于平台。如果这不能解决您的问题,请使用FileSystem.getSeparator()
:您可以传递不同的文件系统,而不是默认文件系统。
答案 6 :(得分:0)
[回复旧帖子 ^ _ ^ ]
根据http://farenda.com/java/java-filename-from-path/的说法,还有另一种方法,由于使用了 Java SE 7或8的java.nio.file
类,可能会更方便/强>
这是从Path获取文件名的最简单方法:
Path path = Paths.get("/proc/version"); System.out.println("path.getFileName(): " + path.getFileName().toString());
以上代码产生:
path.getFileName(): version
答案 7 :(得分:0)
我使用正则表达式来解决这个问题。
对于Windows:
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
答案 8 :(得分:0)
请尝试以下代码:
file.getPath().replace(file.getName(), "");
答案 9 :(得分:0)
Kotlin 解决方案:
val file = File( "/folder1/folder2/folder3/readme.txt")
val pathOnly = file.absolutePath.substringBeforeLast( File.separator )
println( pathOnly )
产生这个结果:
/folder1/folder2/folder3