Как получить только имя родительского каталога определенного файла - PullRequest
96 голосов
/ 20 ноября 2011

Как получить ddd из пути, по которому находится test.java.

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

Ответы [ 9 ]

127 голосов
/ 20 ноября 2011

Используйте File getParentFile() метод и String.lastIndexOf(), чтобы получить просто непосредственный родительский каталог.

Комментарий Марка является лучшим решением, чем lastIndexOf():

file.getParentFile().getName();

Эти решения работают только в том случае, если файл имеет родительский файл (например, создан с помощью одного из конструкторов файлов, принимающего родительский файл).File).Когда getParentFile() равен нулю, вам нужно прибегнуть к использованию lastIndexOf или использовать что-то вроде Apache Commons 'FileNameUtils.getFullPath():

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

Существует несколько вариантов сохранения/ удалить префикс и конечный разделитель.Вы можете использовать тот же класс FilenameUtils, чтобы получить имя из результата, использовать lastIndexOf и т. Д.

18 голосов
/ 20 ноября 2011
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() может быть нулевым, поэтому вы должны проверить его.

14 голосов
/ 16 июля 2014

Используйте ниже,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
8 голосов
/ 28 февраля 2018

В Java 7 у вас есть новые Пути API .Современное и самое чистое решение:

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

Результат будет:

C:/aaa/bbb/ccc/ddd
4 голосов
/ 13 октября 2014

Если у вас просто String path и вы не хотите создавать новый объект 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 голосов
/ 16 сентября 2015
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();
0 голосов
/ 20 марта 2019
    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();
0 голосов
/ 12 апреля 2018

В 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 голосов
/ 15 февраля 2018

С Java 7 я бы предпочел использовать путь. Вам нужно только указать путь в:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...