2011-10-10 35 views
7

Tôi đang phát triển một ứng dụng sử dụng một thư viện mà tải một tập tin cấu hình như:Có thể getResourceAsStream() tìm tệp bên ngoài tệp jar không?

InputStream in = getClass().getResourceAsStream(resource); 

ứng dụng của tôi trong sau đó đóng gói trong một file .jar. Nếu resource nằm trong tệp .jar, tôi có thể chỉ định đường dẫn là "/relative/path/to/resource/resource".

Tôi muốn biết liệu có thể tìm tài nguyên nếu nó nằm ngoài tệp .jar và trong trường hợp này, tôi sẽ chỉ định đường dẫn như thế nào.

(Giả sử bình ứng dụng của tôi là ở app/ và tài nguyên ở số app/config).


Chương trình sử dụng 3 thứ thư viện đảng. Thư viện sử dụng tài nguyên dưới dạng tệp cấu hình.

Tôi cũng muốn tinh chỉnh tệp cấu hình mà không phải giải nén/nén tệp jar mọi lúc.

+0

@AndrewThompson Thư viện sử dụng các tài nguyên như một tập tin cấu hình (đó là một thư viện bên thrid). Tôi cũng muốn tinh chỉnh tệp cấu hình mà không phải giải nén/nén tệp jar mọi lúc. Trên thực tế tôi quên hỏi nếu tôi có thể thực hiện theo cách này :) – kunigami

+0

Thông tin đó có liên quan, vì vậy tôi đã chỉnh sửa thông tin đó thành câu hỏi. API của bên thứ ba có thể được hướng dẫn (ví dụ: bởi ứng dụng của bạn.) Về nơi để tìm kiếm tài nguyên? Về cơ bản những gì tôi đang dẫn đến là cho thấy không đưa nó với các ứng dụng. ở tất cả, nhưng trong một con đường ổn định và tái tạo - chẳng hạn như một thư mục con của 'user.home'. –

+0

Tôi chỉ nhận thấy một chút có nội dung 'applet'. Đây thực sự là một applet? Điều đó làm phức tạp thêm nhiều thứ. –

Trả lời

8

Nói chung, có thể. Về mặt kỹ thuật, lớp ClassLoader của lớp được sử dụng để định vị tài nguyên có tên trong tham số (see Javadoc here). Nếu bạn không sử dụng một đặc biệt ClassLoader thì bạn sẽ nhận được trình nạp lớp bootstrap, tìm kiếm đường dẫn lớp. Vì vậy, nếu bạn có các thư mục hoặc các tệp jar khác trên classpath, chúng sẽ được tìm kiếm.

1

Nó sẽ nhận bất kỳ tài nguyên nào có sẵn cho trình nạp lớp thích hợp (số getClass().getClassLoader() sẽ trả lại). Cho dù trình tải lớp có bao gồm cả thư mục app các tệp jar phụ thuộc vào phần còn lại của ngữ cảnh ứng dụng của bạn hay không.

0

Có một cách để có được thư mục hiện hành (How to get the path of a running JAR file?), nhưng đối với cấu hình bạn chỉ có thể vượt qua một -Dconfig.location để JVM chỉ định một đường dẫn tuyệt đối cho cấu hình

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