Có cách nào để chương trình java xác định vị trí của nó trong hệ thống tệp không?Nhận đường dẫn tệp bằng java
Trả lời
Bạn có thể sử dụng CodeSource#getLocation()
cho việc này. CodeSource
có sẵn theo ProtectionDomain#getCodeSource()
. Lần lượt ProtectionDomain
có sẵn theo Class#getProtectionDomain()
.
URL location = getClass().getProtectionDomain().getCodeSource().getLocation();
File file = new File(location.getPath());
// ...
Điều này trả về vị trí chính xác của Class
được đề cập.
Cập nhật: theo nhận xét, dường như đã có trong đường dẫn lớp. Sau đó, bạn có thể chỉ sử dụng ClassLoader#getResource()
trong đó bạn chuyển đường dẫn gốc-gói tương đối.
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL resource = classLoader.getResource("filename.ext");
File file = new File(resource.getPath());
// ...
Bạn thậm chí có thể lấy nó dưới dạng InputStream
sử dụng ClassLoader#getResourceAsStream()
.
InputStream input = classLoader.getResourceAsStream("filename.ext");
// ...
Đó cũng là cách sử dụng tài nguyên đóng gói bình thường. Nếu nó nằm bên trong một gói, sau đó sử dụng ví dụ com/example/filename.ext
thay thế.
nếu bạn muốn nhận được "thư mục làm việc" cho chương trình hiện đang chạy, sau đó chỉ cần sử dụng:
new File("");
Thư mục làm việc không nhất thiết là nơi chương trình được đặt. – Douglas
Đối với tôi đây làm việc, khi tôi biết chính xác tên của tập tin là gì:
File f = new File("OutFile.txt");
System.out.println("f.getAbsolutePath() = " + f.getAbsolutePath());
Hoặc có giải pháp này quá: http://docs.oracle.com/javase/tutorial/essential/io/find.html
- 1. Java - nhận đường dẫn "tệp chương trình"
- 2. Nhận đường dẫn hiện tại của tệp java đang chạy
- 3. Nhận đường dẫn tệp đầy đủ trong java
- 4. Đường dẫn tệp thuộc tính trong java
- 5. Nhận đường dẫn tuyệt đối của tệp
- 6. Đường dẫn tệp tương đối Java
- 7. Cách tạo tệp mới bằng đường dẫn?
- 8. Cách tìm đường dẫn tải xuống Chrome bằng Java
- 9. Mở đường dẫn bằng Desktop.open() từ java trên ubuntu (linux)
- 10. Tải lên tệp bằng Đường dẫn Activeadmin bằng kẹp giấy
- 11. Java Properties, nhận được đường dẫn tập tin
- 12. Java - Nhận đường dẫn tuyệt đối của máy chủ
- 13. Nhận đường dẫn UNC từ đường dẫn cục bộ hoặc đường dẫn được ánh xạ
- 14. Kéo và thả đường dẫn tệp đến Java Swing JTextField
- 15. Đường dẫn xây dựng Java
- 16. VB.net - kéo và thả và nhận đường dẫn tệp?
- 17. Nhận đường dẫn tệp từ ảnh trong ImageView
- 18. Nhận đường dẫn đầy đủ của các tệp trong PowerShell
- 19. Nhận đường dẫn tuyệt đối của tệp trên nội dung
- 20. Nút js Nhận đường dẫn thư mục từ một tệp
- 21. Nhận đường dẫn thư mục tới tệp .class chứa chính
- 22. Định dạng Đường dẫn Tệp
- 23. Đường dẫn đầy đủ từ đầu vào tệp bằng jQuery
- 24. Cách lấy đường dẫn tuyệt đối của tệp bằng tkFileDialog?
- 25. Lấy đường dẫn thư mục của đường dẫn tệp tuyệt đối bằng Python
- 26. Đường dẫn tệp tuyệt đối cho tập lệnh java
- 27. Đường dẫn tệp bằng Python dưới dạng lỗi ném chuỗi
- 28. Cách xử lý ~ trong đường dẫn tệp
- 29. Cách mở tệp trên đường dẫn tương đối bằng T4?
- 30. jquery - nhận đường dẫn url?
+1, nhưng lưu ý rằng P rotectionDomain.getCodeSource() và CodeSource.getLocation() có thể là null. –
@ bkail: Nó thực sự có thể trả về null khi nó được tải bằng cách sử dụng trình nạp lớp nhà được thiết kế kém, hoặc khi nó được tải từ một số nguồn luồng bên ngoài, v.v. Tuy nhiên, điều này thường không áp dụng cho các chương trình Java "cụ thể" với 'chính() '. – BalusC
Điều này chắc chắn thực hiện công việc - nhưng nó trông không đẹp lắm. Những gì tôi cần làm là tải một tập tin cấu hình mà cần phải được trong cùng một thư mục như jar của tôi nhưng có thể được chạy từ bất kỳ vị trí nào. Đây có phải là cách thích hợp để lấy thông tin vị trí tệp không? – markovuksanovic