2011-01-04 9 views
4

jarファイルを作成した後に、jarファイルに含まれるイメージへのファイルパスからFileオブジェクトを作成する必要があります。試してみた場合:jarファイルのイメージへのリソースパスからファイルオブジェクトを作成します。

URL url = getClass().getResource("/resources/images/image.jpg"); 
File imageFile = new File(url.toURI()); 

ただし、動作しません。誰かがそれを行う別の方法を知っていますか?

答えて

2

圧縮アーカイブ内のエントリのための物理的なファイルが存在しないため、通常、あなたが直接、java.io.Fileオブジェクトを取得することはできません。あなたは(すべての良いAPIは、ストリームで動作することができるので、場合によっては最高の最もある)ストリームと一緒に暮らすか、一時ファイルを作成することができます次のいずれかのリソースまたは生からAndroid上のファイルを作成するには

URL imageResource = getClass().getResource("image.gif"); 
    File imageFile = File.createTempFile(
      FilenameUtils.getBaseName(imageResource.getFile()), 
      FilenameUtils.getExtension(imageResource.getFile())); 
    IOUtils.copy(imageResource.openStream(), 
      FileUtils.openOutputStream(imageFile)); 
+1

FilenameUtilsはどのパッケージですか? – MBU

+0

Apache Commons-IO – mhaller

+1

アプレットまたはアプリケーションでコードスニペットが機能しないことに注意してください。 JWSを使用して配備されました。リソースが編集を必要としない限り(イメージはありそうにない)、それを一時ファイルに展開するのは通常の方法ではありません。 –

1

アーカイブ内の参照に対してFileオブジェクトを作成することはできません。 Fileオブジェクトが絶対に必要な場合は、まずファイルを一時的な場所に抽出する必要があります。一方、最も優れたAPIは入力ストリームを代わりに使用し、アーカイブ内のファイルを取得できます。

+1

を忘れてはいけないが、最も良いAPIのも、あなたが得ることができ、代わりに、入力ストリームがかかりますのファイルアーカイブ。具体的には、 'getResource'の代わりに' getResourceAsStream'を使うことができます。 – Powerlord

3

これは動作するはずです。

String imgName = "/resources/images/image.jpg"; 
InputStream in = getClass().getResourceAsStream(imgName); 
ImageIcon img = new ImageIcon(ImageIO.read(in)); 
+2

クイックフィックス: 'getResource'は' URL'を返し、 'getResourceAsStream'は' InputStream'を返します。 – Powerlord

5

を私はこれを行うファイル:

try{ 
    InputStream inputStream = getResources().openRawResource(R.raw.some_file); 
    File tempFile = File.createTempFile("pre", "suf"); 
    copyFile(inputStream, new FileOutputStream(tempFile)); 

    // Now some_file is tempFile .. do what you like 
} catch (IOException e) { 
    throw new RuntimeException("Can't create temp file ", e); 
} 

private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while((read = in.read(buffer)) != -1){ 
     out.write(buffer, 0, read); 
    } 
} 
  • 一方」など、あなたのストリームをクローズする
+0

これはこのトピックに関するすべての回答です。 – Jesse

関連する問題