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 lastIndexOf
hoặ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 FilenameUtils
lớ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 File
cá 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 File
thể 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 -2
sẽ 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.java
có 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à.class
tệ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ếtddd
vị 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ó.