2009-06-03 27 views
6

Tôi đang sử dụng FlatPack để phân tích cú pháp và tải dữ liệu từ các tệp phẳng. Điều này đòi hỏi phải tải một tập tin cấu hình lưu trữ ánh xạ của các cột của tập tin phẳng.Làm cách nào để truy cập tệp cấu hình bên trong bình?

Tôi có một hằng số để xác định vị trí của các tập tin bản đồ:

private static final String MAPPING_FILE = "src/com/company/config/Maping.pzmap.xml"; 

Tôi có một phân tích cú pháp (File datafile) phương pháp mà thực hiện các phân tích cú pháp:

private void parse(File dataFile) throws FileNotFoundException, SQLException { 
     Parser parser; 

     log.info("Parsing " + dataFile.getName()); 

     FileReader mappingFileReader = new FileReader(MAPPING_FILE); 
     FileReader dataFileReader = new FileReader(dataFile); 

     parser = DefaultParserFactory.getInstance().newFixedLengthParser(mappingFileReader, dataFileReader); 
     parser.setHandlingShortLines(true); 

     DataSet dataSet = parser.parse(); 

     //process the data 
} 

Khi tôi jar lên tất cả mọi thứ và chạy nó như một cái lọ - nó ném bom trên FileReader mappingFileReader = new FileReader(MAPPING_FILE); với một số FileNotFoundException. Đó là tập tin bên trong bình mặc dù.

Làm cách nào để truy cập?

Tôi đã xem this questionthis question về cách truy cập các tệp trong các thẻ và cả hai đều khuyên bạn nên tạm thời giải nén tệp. Tôi không muốn làm điều đó.

Trả lời

12

nếu bên trong JAR, đó không phải là Tệp, nói chung. Bạn nên tải dữ liệu bằng cách sử dụng Class.getResourceAsStream(String) hoặc tương tự.

+1

Đó phải là "Class.getResourceAsStream()" – mtpettyp

+0

Rất tiếc. Cảm ơn vì điều đó. – skaffman

1

Nếu tôi nhớ không lầm thì getResourceAsStream() có thể hành xử khác nhau tùy thuộc vào máy chủ web webapp của bạn được triển khai, ví dụ tôi nghĩ rằng nó có thể là một vấn đề khi triển khai như một cuộc chiến trên một cá thể Websphere. Nhưng tôi không chắc chắn nếu điều này áp dụng cho bạn.

Nhưng tôi không chắc bạn đang cố giải quyết vấn đề "đúng": nếu đó là tệp cấu hình, điều đó có nghĩa là dữ liệu phụ thuộc đúng không? Không phụ thuộc mã (jar của bạn)? Khi tệp phẳng sẽ thay đổi, tệp cấu hình của bạn cũng sẽ cần phải thay đổi, đúng không? Nếu điều này đúng, có vẻ như cấu hình sẽ được lưu trữ tốt hơn ở nơi khác hoặc thậm chí được chuyển thành tham số cho bình của bạn.

Nhưng có lẽ tôi đã không hiểu đầy đủ vấn đề của bạn ...

0

Sử dụng Apache Commons Configuration, sau đó bạn có thể đọc/ghi XML, update tự động để tìm tập tin cấu hình trong đường dẫn hoặc jar, mà không có nhiều phức tạp .

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