2012-03-23 35 views
8

Tôi gặp sự cố lạ:FileInputStream vs ClassPathResource vs getResourceAsStream và toàn vẹn tệp

trong src/main/resources tôi có tệp "template.xlsx".

Nếu tôi làm điều này:

InputStream is = new ClassPathResource("template.xlsx").getInputStream(); 

Hoặc này:

InputStream is = ClassLoader.getSystemResourceAsStream("template.xlsx"); 

Hoặc này:

InputStream is = getClass().getResourceAsStream("/template.xlsx"); 

Khi tôi cố gắng để tạo ra một bảng tính:

Workbook wb = new XSSFWorkbook(is); 

tôi nhận được lỗi này:

java.util.zip.ZipException: invalid block type 

NHƯNG, khi tôi nhận được tập tin của tôi như thế này:

InputStream is = new FileInputStream("C:/.../src/main/resources/template.xlsx"); 

Nó hoạt động!

Điều gì là sai? Tôi không thể mã hóa đường dẫn đầy đủ vào tệp.

Ai đó có thể giúp tôi với điều này không?

Cảm ơn

+1

Bạn có thể đảm bảo rằng khi bạn tải từ đường dẫn lớp bạn * hoàn toàn * chắc chắn phiên bản 'template.xlsx' nào đang được tải? Một 'getResourceAsStream()' (và tương tự) có thể tải một tài nguyên từ nhiều nơi. Với tên tập tin bạn hoàn toàn chắc chắn những gì đang được nạp. –

Trả lời

18

Tôi gặp vấn đề tương tự, có thể bạn gặp vấn đề với lọc maven.

Mã này tải các tập tin từ nguồn, không lọc tải

InputStream is = new FileInputStream("C:/.../src/main/resources/template.xlsx"); 

Mã này các tập tin từ thư mục mục tiêu, sau maven đã lọc nội dung

InputStream is = getClass().getResourceAsStream("/template.xlsx"); 

Bạn không nên lọc tập tin nhị phân như excel và sử dụng hai bộ tài nguyên loại trừ lẫn nhau như được mô tả ở dưới cùng của trang này maven resources plugin

+0

Điều này là do lọc maven và không phải là phương pháp được sử dụng để tải luồng! Cảm ơn :) –

+0

Cảm ơn bạn rất nhiều vì đã trả lời, tôi đã dành rất nhiều thời gian cho vấn đề này (( –

+0

Đã lưu lại giờ của tôi, cảm ơn. –

0

chưa bạn cố gắng truy cập vào nó như

InputStream is = new FileInputStream("/main/resources/template.xlsx"); 

?

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