Một cách sẽ là sử dụng thuộc tính hệ thống, System.getProperty("user.dir");
điều này sẽ cung cấp cho bạn "Thư mục làm việc hiện tại khi các thuộc tính được khởi tạo". Đây có lẽ là những gì bạn muốn. để tìm ra nơi java
lệnh được phát hành, trong trường hợp của bạn trong thư mục có tệp để xử lý, mặc dù tệp .jar thực sự có thể nằm ở một nơi khác trên máy. Có thư mục của tệp .jar thực sự không hữu ích trong hầu hết các trường hợp.
Phần sau sẽ in ra thư mục hiện tại từ nơi lệnh được gọi bất kể tệp .class hoặc .jar chứa tệp .class ở đâu.
public class Test
{
public static void main(final String[] args)
{
final String dir = System.getProperty("user.dir");
System.out.println("current dir = " + dir);
}
}
nếu bạn đang ở trong /User/me/
và tệp .jar của bạn có chứa mã trên /opt/some/nested/dir/
thì lệnh java -jar /opt/some/nested/dir/test.jar Test
sẽ xuất ra current dir = /User/me
.
Bạn cũng nên xem xét việc sử dụng một trình phân tích cú pháp đối số dòng lệnh hướng đối tượng tốt. Tôi thực sự khuyên bạn nên dùng JSAP , Trình phân tích cú pháp đối số đơn giản của Java. Điều này sẽ cho phép bạn sử dụng System.getProperty("user.dir")
và thay vào đó là một thứ khác để vượt qua hành vi. Một giải pháp dễ bảo trì hơn nhiều. Điều này sẽ làm cho việc chuyển vào thư mục để xử lý rất dễ thực hiện và có thể quay lại user.dir
nếu không có gì được chuyển vào.