min*_*nil 103 java groovy java-io
如何ddd
从test.java所在的路径名获取.
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
Run Code Online (Sandbox Code Playgroud)
Dav*_*ton 132
使用File
的getParentFile()
方法和String.lastIndexOf()
检索只是眼前的父目录.
马克的评论是一个比lastIndexOf()
以下更好的解决方案:
file.getParentFile().getName();
Run Code Online (Sandbox Code Playgroud)
这些解决方案仅在文件具有父文件时才有效(例如,通过其中一个文件构造函数创建父文件File
).如果getParentFile()
为null,您将需要使用lastIndexOf
,或使用像Apache CommonsFileNameUtils.getFullPath()
这样的东西:
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Run Code Online (Sandbox Code Playgroud)
保留/删除前缀和尾随分隔符有几种变体.您可以使用同一个FilenameUtils
类从结果中获取名称,使用lastIndexOf
等.
Sur*_*oen 18
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
Run Code Online (Sandbox Code Playgroud)
f.getParentFile()
可以为null,因此您应该检查它.
Ish*_*age 15
使用下面,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Run Code Online (Sandbox Code Playgroud)
nev*_*ves 10
在Java 7中,您有了新的Paths api.现代最干净的解决方案是:
Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();
Run Code Online (Sandbox Code Playgroud)
结果将是:
C:/aaa/bbb/ccc/ddd
Run Code Online (Sandbox Code Playgroud)
如果您只有String路径,并且不想创建新的File对象,则可以使用以下方法:
public static String getParentDirPath(String fileOrDirPath) {
boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar,
endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}
Run Code Online (Sandbox Code Playgroud)