2009-07-15 56 views
20

Tôi cố gắng để sử dụng một đường dẫn tương đối để xác định vị trí một tập tin thực thi trong một lớp Java thay vì dòng mã hóa cứng mà làm việc, nhưng sử dụng một cái gì đó như:Sử dụng đường dẫn thư mục tương đối trong Java

final static String directory = "../../../ggla/samples/obj/linux_x86"

thất bại ... cách thích hợp để sử dụng một đường dẫn tương đối trong Java là gì?

+0

Xác định không thành công. Bạn nhận được thông báo lỗi nào? Bạn có đang sử dụng phân tách đường dẫn chính xác cho hệ điều hành của mình không (có một biến hệ thống Java cho dấu tách đường dẫn mà bạn nên sử dụng)? –

+0

Thư mục hiện tại của bạn là gì và tệp đó ở đâu hoàn toàn? – akarnokd

Trả lời

35

Giải thích rất có thể là thư mục hiện tại của bạn không phải là nơi bạn nghĩ. Bạn có thể kiểm tra việc sở hữu hệ thống user.dir để xem những gì con đường cơ bản của ứng dụng là, hoặc bạn có thể làm điều gì đó như thế này:

System.out.println(new File(".").getCanonicalPath()); 

ngay trước khi bạn sử dụng đường dẫn tương đối để gỡ lỗi nơi bắt đầu tham chiếu tương đối của bạn .

+1

thông tin tuyệt vời cảm ơn! –

0

Bạn có thể sử dụng các đường dẫn tương đối như mô tả và đường dẫn sẽ hoạt động. Vì vậy, lỗi có thể là ở một nơi khác.

Vui lòng đăng chương trình hoàn chỉnh để tạo lại lỗi của bạn, sau đó chúng tôi có thể trợ giúp.

0

Tôi sẽ bắt đầu bằng cách sử dụng dấu tách và đường phân cách được chỉ định trong Java File class. Tuy nhiên, như tôi đã nói trong bình luận của mình, tôi cần thêm thông tin hơn là "nó thất bại" để được giúp đỡ.

+0

Tôi không biết các nền tảng khác, nhưng trên WinXP + và Linux, sử dụng dấu gạch chéo có vẻ hoạt động. Nhưng +1 cho File.separator. – akarnokd

+0

Tôi thường lười biếng trong các ứng dụng cá nhân của mình và sử dụng dấu gạch chéo, nhưng trong mã sản xuất (tại nơi làm việc), tôi chuyển đổi mọi thứ để sử dụng dấu tách và đường dẫn trong Tệp. –

0

Đối với đường dẫn tương đối, có thể bạn có thể sử dụng một trong các phương thức cung cấp bởi java để bắt đầu đường dẫn tương đối như getRelativePath .... Bạn phải sử dụng/và không // trong chuỗi trong java!

2

Sử dụng System.out.println (System.getProperty ("user.dir")); để xem thư mục hiện tại của bạn ở đâu. Sau đó, bạn có thể sử dụng đường dẫn tương đối từ địa chỉ này.

Hoặc nếu bạn không cần cập nhật tệp bạn đang cố gắng đọc lấy nó từ đường dẫn lớp bằng cách sử dụng getResourceAsStream ("tên tệp");

Karl

1

Những gì bạn cần là getCanonicalPath hoặc getCanonicalFile để giải quyết đường dẫn tương đối.

System.out.println(new File("../../../ggla/samples/obj/linux_x86") 
    .getCanonicalPath()); 
+0

thông tin tuyệt vời cảm ơn! –

Các vấn đề liên quan