Lẫn lộn giữa thư mục làm việc hiện tại trong phương thức getAbsolutePath của File
GetAbsolutePath của tệp có xu hướng rằng nếu một đường dẫn tương đối hoặc chỉ tên tệp được cung cấp trong hàm tạo tệp, thì nó sẽ giải quyết đường dẫn tuyệt đối bằng cách thêm tiền tố vào thư mục làm việc hiện tại.
Định nghĩa của thư mục làm việc hiện tại là thư mục mà chúng tôi chạy Chương trình Java của mình. Trong ví dụ của tôi, chương trình java của tôi nằm bên trongD:\my-app\src\App.java
Khi tôi làm một System.out.println(System.getProperty("user.dir"));
Sau đó, lý tưởng nhất là nó nên in D:\my-app\src
Nhưng nó thực sự đang in D:\my-app
Tại sao nó như vậy?
Trả lời
Khi bạn khởi động một ứng dụng từ IntelliJ, thư mục làm việc của nó được đặt theo những gì được đặt trong "Thư mục làm việc" trong hộp thoại "Chạy / Gỡ lỗi cấu hình" .
Ở đó, bạn có thể đặt thư mục làm việc thành một giá trị cố định chẳng hạn như D:\my-app\src
. Một tùy chọn khác là sử dụng một biến đường dẫn . Danh sách các biến có sẵn dường như có thể phụ thuộc vào nhiều thứ - hãy mở hộp thoại và xem những gì có sẵn. Một tùy chọn mà tôi thấy $FileDir$
mà tôi tưởng tượng sẽ là thư mục của tệp mã nguồn.
Tôi nghĩ rằng tôi đã tìm thấy giải pháp. Intellij đã thực sự gây ra sự cố bằng cách đặt ngầm thư mục src làm thư mục nguồn. Tôi đã tìm thấy nó bằng cách đi tới cài đặt mô-đun trong Intellij. Khi tôi chạy tương tự từ dấu nhắc lệnh, thư mục làm việc chính xác tức D:\my-app\src\
là được chọn.