2012-03-23 15 views
8

getResourceAsStream対して、ファイル、私は奇妙な問題を抱えています。FileInputStreamのClassPathResource対整合性

私はこれを行う場合:私は、ブックを作成しようとすると

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

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

またはこの:

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

それともこれを

Workbook wb = new XSSFWorkbook(is); 

私はこのエラーを取得する:

java.util.zip.ZipException: invalid block type 

しかし、私はこのように私のファイルを取得するとき:

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

をそれは働きます!

どうしたのですか?私はフルパスをファイルにハードコーディングできません。

誰かがこれを手伝ってくれますか?

おかげ

+1

クラスパスからロードするときに'template.xlsx'のどのバージョンがロードされているかを完全に確認していますか? 'getResourceAsStream()'(など)は、多くの場所からリソースをロードできます。ファイル名では、何がロードされているかが絶対にわかります。 –

答えて

18

私は同じ問題を抱えていました。あなたはおそらくmavenフィルタリングに問題があります。

このコードのロード元からファイル、フィルタリングされていない

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

このコードのロードターゲット・ディレクトリからファイル、Mavenのコンテンツ

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

をフィルタ処理した後、あなたのようなバイナリファイルをフィルタリングしてはなりませんこのページの下部に記載されているように、互いに排他的な2つのリソースセットを使用してください。maven resources plugin

+0

これは、mavenフィルタリングによるものであり、ストリームをロードするためのメソッドではありません。ありがとう:) –

+0

非常に答えをありがとう、私はこの問題(( –

+0

時間を保存しました、ありがとうございます) –

0

あなたは

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

のようにそれにアクセスしてみませんか?