如何仅获取特定文件的父目录名称


111

如何ddd从test.java所在的路径名获取。

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");

1
这是通用文件,还是您要获取源文件的父目录?如果是后者,则不确定您是否了解Java编译。在运行时,test.java甚至在运行程序的计算机上甚至都不存在。这.class是运行的已编译文件。因此,这只有在知道位置的ddd情况下才有效,在这种情况下,以编程方式找到它是没有意义的。只是硬编码它。
Mark Peters

Answers:


141

使用FilegetParentFile()方法,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等等。


14
您不需要lastIndexOf,只需使用file.getParentFile().getName()
Mark Peters

13
以防万一。如果返回null(如果您File使用相对路径创建了实例),请尝试file.getAbsoluteFile().getParentFile().getName()
nidu 2012年

1
@MarkPeters不过,这仅在使用父文件创建文件时才有效,我猜这种情况相对很少。
戴夫牛顿

20
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() 可以为null,因此您应该检查一下。


1
只是为了确保,输出如下:C:/ aaa / bbb / ccc / ddd
Guy Avraham

16

在下面使用

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();

值得指出的是,即使基础文件没有,此方法也应具有父集。
佩斯

13

在Java 7中,您具有新的Paths api。最现代,最干净的解决方案是:

Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();

结果将是:

C:/aaa/bbb/ccc/ddd

5

如果您只有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));
}

4
如果您已经在根目录上,则抛出ArrayOutOfBoundsException-“ /”
Jnmgr

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

1

从Java 7开始,我更喜欢使用Path。您只需要将路径放入:

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");

并创建一些get方法:

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}

0

在Groovy中:

无需创建File实例来解析groovy中的字符串。可以按照以下步骤完成:

String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2]  // this will return ddd

拆分将创建数组[C:, aaa, bbb, ccc, ddd, test.java],索引-2将指向最后一个数组之前的条目,在本例中为ddd


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.