Answers:
使用File
的getParentFile()
方法,并仅String.lastIndexOf()
检索直接的父目录。
马克的评论比lastIndexOf()
:
file.getParentFile().getName();
仅当文件具有父文件(例如,通过使用父文件的文件构造函数之一创建)时,这些解决方案才有效File
。当getParentFile()
为null时,您将需要使用lastIndexOf
,或使用类似Apache Commons'的方法FileNameUtils.getFullPath()
:
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
有几种保留/删除前缀和尾随分隔符的变体。您可以使用同一FilenameUtils
类从结果中获取名称,也可以使用lastIndexOf
等等。
lastIndexOf
,只需使用file.getParentFile().getName()
。
null
(如果您File
使用相对路径创建了实例),请尝试file.getAbsoluteFile().getParentFile().getName()
。
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile()
可以为null,因此您应该检查一下。
如果您只有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));
}
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"
如果需要通过其他路径附加文件夹“ ddd”,请使用;
String currentFolder= "/" + currentPath.getName().toString();
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.java
甚至在运行程序的计算机上甚至都不存在。这.class
是运行的已编译文件。因此,这只有在知道位置的ddd
情况下才有效,在这种情况下,以编程方式找到它是没有意义的。只是硬编码它。