2012-04-20 3 views
6

tôi có cấu trúc mã sau:tải tập tin từ JAR trong Scala

Projects/ 
    classes/ 
     performance/AcPerformance.class 
     resources/ 
        Aircraft/ 
          allAircraft.txt 

tôi có các nội dung của thư mục lớp học trong một JAR và mã scala AcPerformance tôi đang cố gắng để đọc các nội dung của văn bản thư mục Máy bay các tập tin. Mã của tôi:

val AircraftPerf = getClass.getResource("resources/Aircraft").getFile 
val dataDir = new File(AircraftPerf) 
val acFile = new File(dataDir, "allAircraft.txt") 

for (line <- linesFromResource(acFile)) { 
    // read in lines 
} 

Khi tôi cố gắng chạy mã tôi nhận được lỗi sau:

Nguyên nhân: java.io.FileNotFoundException: C: \ Projects \ file: \ C: \ Projects \ thư viện \ aircraft.jar! \ Aircraft \ allAircraft.txt (Tên tệp, tên thư mục hoặc cú pháp nhãn khối lượng không chính xác)

Đây có phải là cách đúng để đọc nội dung của JAR không? Cảm ơn!

Trả lời

8

Không, URL 's getFile sẽ không làm những gì bạn muốn ở đây-con đường nó cung cấp cho bạn không phải là một đường dẫn hệ thống tập tin mà bạn có thể sử dụng trong một constructor File. Bạn muốn được tốt nhất bằng cách sử dụng getResourceAsStream và đường dẫn đầy đủ đến tài nguyên:

val in = getClass.getResourceAsStream("/resources/Aircraft/allAircraft.txt") 

Lưu ý rằng bạn cũng cần phải mở đầu con đường với / để làm cho nó tuyệt đối trong phiên bản hiện tại của bạn, bạn đang tìm kiếm một resources thư mục theo số performance.