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

问题描述 投票:94回答:9

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

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
java groovy java-io
9个回答
127
投票

使用File's getParentFile() methodString.lastIndexOf()只检索直接的父目录。

Mark的评论是比lastIndexOf()更好的解决方案:

file.getParentFile().getName();

这些解决方案仅在文件具有父文件时才有效(例如,通过其中一个文件构造函数创建父文件File)。当getParentFile()为null时,你需要求助于使用lastIndexOf,或使用像Apache Commons' FileNameUtils.getFullPath()这样的东西:

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

保留/删除前缀和尾随分隔符有几种变体。您可以使用相同的FilenameUtils类从结果中获取名称,使用lastIndexOf等。


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

f.getParentFile()可以为null,所以你应该检查一下。


14
投票

使用下面,

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

9
投票

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

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

结果将是:

C:/aaa/bbb/ccc/ddd

4
投票

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

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


0
投票
    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();
© www.soinside.com 2019 - 2024. All rights reserved.