Câu trả lời:
Sử dụng File's getParentFile()phương pháp và String.lastIndexOf()để lấy chỉ thư mục cha ngay lập tức.
Nhận xét của Mark là một giải pháp tốt hơn lastIndexOf():
file.getParentFile().getName();
Các giải pháp này chỉ hoạt động nếu tệp có tệp mẹ (ví dụ: được tạo thông qua một trong các trình tạo tệp lấy tệp mẹ File). Khi nào getParentFile()là null, bạn sẽ cần phải sử dụng lastIndexOfhoặc sử dụng một cái gì đó như Apache Commons 'FileNameUtils.getFullPath() :
FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd
Có một số biến thể để giữ lại / bỏ dấu phân cách tiền tố và dấu. Bạn có thể sử dụng cùng một FilenameUtilslớp để lấy tên từ kết quả, sử dụng lastIndexOf, v.v.
lastIndexOf, chỉ cần sử dụng file.getParentFile().getName().
null(nếu bạn đã tạo Filecá thể với đường dẫn tương đối) - hãy thử file.getAbsoluteFile().getParentFile().getName().
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())
f.getParentFile() có thể là null, vì vậy bạn nên kiểm tra nó.
Sử dụng bên dưới,
File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();
Nếu bạn chỉ có đường dẫn Chuỗi và không muốn tạo đối tượng Tệp mới, bạn có thể sử dụng một cái gì đó như:
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"
nếu bạn cần thêm thư mục "ddd" bằng cách sử dụng đường dẫn khác;
String currentFolder= "/" + currentPath.getName().toString();
Từ java 7, tôi thích sử dụng Path hơn. Bạn chỉ cần đặt đường dẫn vào:
Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");
và tạo một số phương thức get:
public String getLastDirectoryName(Path directoryPath) {
int nameCount = directoryPath.getNameCount();
return directoryPath.getName(nameCount - 1);
}
Ở Groovy:
Không cần tạo một Filethể hiện để phân tích cú pháp chuỗi trong groovy. Nó có thể được thực hiện như sau:
String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2] // this will return ddd
Việc phân tách sẽ tạo ra mảng [C:, aaa, bbb, ccc, ddd, test.java]và chỉ mục -2sẽ trỏ đến mục nhập trước mục cuối cùng, trong trường hợp này làddd
//get the parentfolder name
File file = new File( System.getProperty("user.dir") + "/.");
String parentPath = file.getParentFile().getName();
test.javacó thể sẽ không tồn tại trên máy tính nơi chương trình đang được chạy. Đó là.classtệp đã biên dịch được chạy. Vì vậy, điều này sẽ chỉ hoạt động nếu bạn biếtdddvị trí của nó, trong trường hợp đó, không có ích gì khi tìm nó theo chương trình; chỉ cần mã cứng nó.