Tôi mới sử dụng OSGi và đã tạo một gói OSGi mà tôi chạy trong vùng chứa Apache OSGi của Apache. Có một tài nguyên tệp có trong gói, mà tôi cần chuyển sang phương thức dưới dạng java.io.File
. Để khởi tạo một đối tượng File, hoặc một URI trong "file" -scheme hoặc đường dẫn như chuỗi là cần thiết. Làm thế nào để tôi lấy lại bất kỳ thứ gì trong một cách sạch sẽ?Làm cách nào để truy cập tệp trong gói OSGi?
Tôi đã thử sử dụng context.getBundle().getResource("/myfile")
(trong đó ngữ cảnh thuộc loại org.osgi.framework.BundleContext
) trả về URI bundle://6.0:0/myfile
. Nhưng URI này không thể được chuyển đổi thành một thể hiện tệp bằng cách sử dụng hàm tạo File(URI uri)
vì nó có "bó" -scheme.
Người ta có thể cố gắng xây dựng đường dẫn đến vị trí biết thư mục làm việc và khai thác bundleId của gói của tôi, nhưng tôi nghi ngờ đây là phương pháp hay nhất.
Bất kỳ ý tưởng nào?
Equinox có lớp tiện ích đặc biệt để làm chuyển đổi như vậy trong tương lai cách chống, nhưng tôi không biết về Felix. Nếu bạn muốn mã chống lại API OSGi sạch, bạn sẽ cần sao chép tệp này ở đâu đó, nơi bạn có thể dễ dàng truy xuất đối tượng Tệp tương ứng (ví dụ trong bộ nhớ Bundle.getDataFile()). –