Ответы:
Используйте File
«s getParentFile()
метод и String.lastIndexOf()
получить только непосредственный родительский каталог.
Комментарий Марка - лучшее решение, чем lastIndexOf()
:
file.getParentFile().getName();
Эти решения работают только в том случае, если у файла есть родительский файл (например, созданный с помощью одного из конструкторов файлов, принимающих родительский файл File
). Когда getParentFile()
имеет значение null, вам нужно прибегнуть к использованию lastIndexOf
или использовать что-то вроде Apache CommonsFileNameUtils.getFullPath()
:
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Существует несколько вариантов сохранения / удаления префикса и конечного разделителя. Вы можете использовать один и тот же FilenameUtils
класс, чтобы получить имя из результата, использовать lastIndexOf
и т. Д.
lastIndexOf
, просто используйте file.getParentFile().getName()
.
null
(если вы создали File
экземпляр с относительным путем) - попробуйте file.getAbsoluteFile().getParentFile().getName()
.
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile()
может быть нулевым, поэтому вы должны его проверить.
Используйте ниже,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Если у вас есть только строковый путь и вы не хотите создавать новый объект 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));
}
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();
Из java 7 я бы предпочел использовать Path. Вам нужно только ввести путь:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
и создайте метод получения:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
В 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
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.java
вероятно, даже не будет существовать на компьютере, на котором выполняется программа. Запускается скомпилированный.class
файл. Таким образом, это будет работать, только если вы знаете, гдеddd
он находится, и в этом случае нет смысла искать его программно; просто запрограммируйте его.