Відповіді:
Використовуйте File
«s 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
тощо.
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();
Якщо у вас тільки шлях 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));
}
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 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);
}
У 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
знаходиться, і в цьому випадку немає сенсу його шукати програмно; просто жорсткий код.