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

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

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

  • 你不需要`lastIndexOf`,只需使用`file.getParentFile().getName()`. (14认同)
  • 以防万一.如果它返回`null`(如果你用相对路径创建`File`实例) - 尝试`file.getAbsoluteFile().getParentFile().getName()`. (12认同)

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)

  • getParent()之后,需要toString(),getFileName返回一个相对Path对象,仅代表“test.java”。 (2认同)

Fed*_*ana 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));
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您已经在根位置-“ /”-,则将引发ArrayOutOfBoundsException (4认同)