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

时间:2011-11-19 20:28:46

标签: java groovy java-io

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

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

10 个答案:

答案 0 :(得分:124)

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

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

file.getParentFile().getName();

这些解决方案仅在文件具有父文件时有效(例如,通过其中一个文件构造函数创建父文件File)。当getParentFile()为空时,您需要使用lastIndexOf,或使用Apache Commons' FileNameUtils.getFullPath()之类的内容:

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

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

答案 1 :(得分:18)

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

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

答案 2 :(得分:14)

使用以下,

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

答案 3 :(得分:8)

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

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

结果将是:

C:/aaa/bbb/ccc/ddd

答案 4 :(得分: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));
}

答案 5 :(得分: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();

答案 6 :(得分:0)

从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);
}

答案 7 :(得分: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

答案 8 :(得分:0)

    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();

答案 9 :(得分:0)

对于Kotlin:

 fun getFolderName() {
            
            val uri: Uri
            val cursor: Cursor?
    
            uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
            val projection = arrayOf(MediaStore.Audio.AudioColumns.DATA)
            cursor = requireActivity().contentResolver.query(uri, projection, null, null, null)
            if (cursor != null) {
                column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Audio.AudioColumns.DATA)
            }
            
            while (cursor!!.moveToNext()) {
    
                absolutePathOfImage = cursor.getString(column_index_data)
    
    
                val fileName: String = File(absolutePathOfImage).parentFile.name
    }
}