如何将文件(image.gif)从我的“.jar”复制到文件夹?

时间:2013-03-21 13:35:22

标签: java image resources

我的.jar(program.jar / resources / img / image.gif)中有一个图像,我想在我的main的开头调用methot将它们复制到“C:\ folder” 。它应检查文件“C:\ folder \ image.gif”是否存在,如果不存在,则复制它。 我研究了这个话题,但我找不到办法。 这就是我所拥有的,它的工作原理......但它创建了一个空文件(image.gif),字母为0字节。它会从我的.jar创建 a 文件,而不是 文件。

代码:

//MyResources.saveResource("/resources/img/image.gif", "C:\folder", "image.gif");
public static void saveResource(String fromFile, String toFolder, String toFile){
    InputStream stream = MyResources.class.getResourceAsStream(fromFile);
    if (stream == null) {
        //send your exception or warning
    }
    OutputStream resStreamOut;
    int readBytes;
    byte[] buffer = new byte [4096];
    try {
        resStreamOut = new FileOutputStream(new File (toFolder + File.separator + toFile));
        while ((readBytes = stream.read(buffer)) != -1){ //LINE 80
            resStreamOut.write (buffer, 0, readBytes); 
        }
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
}

我也收到一个错误(NullPointerException解释了文件为空的原因,但我不知道如何解决):

Exception in thread "main" java.lang.NullPointerException at
com.github.CrafterPGSV.Chess.Library.MyResources.saveResource(MyResources.java:80)
at com.github.CrafterPGSV.Chess.Library.MyResources.createFolders(MyResources.java:61)
at com.github.CrafterPGSV.Chess.Chess.main(Chess.java:10)

我的主要电话是“MyResources.createFolders();”如果文件夹不存在,则创建该文件夹。在“createFolders”结束时,它调用“saveResources(...)”来保存图像。

2 个答案:

答案 0 :(得分:0)

不知道为什么其他答案被删除了,但在写完后你需要resStreamOut.close()

你需要在stream == null(大概抛出异常)时实现这个案例。

此外,永远不会捕获并吞下错误:printStackTrace() 错误处理,忽略错误。

答案 1 :(得分:0)

错误是“saveResource()”的第一行:

InputStream stream = this.getClass().getResourceAsStream(fromFile);

这里,“stream”始终为null。以下是解决此问题的方法(使用Eclipse):

  1. src 中创建一个新的(让我们称之为资源)。

  2. 中创建一个新的文件夹(让我们称之为 myPictures

  3. 如果需要,可以创建更多文件夹。我将在 myPictures 中创建一个新文件夹,我将其称为 partyPictures

  4. 选择一个文件夹并将图像(或其他内容)放入其中。我将在 partyPictures

  5. 中有一个名为 imageName.jpg 的图像
  6. 然后,转到“导航器”,找到您的Proyect,您将看到有一个名为 bin 的文件夹。在里面,您应该看到您的包在文件夹中组织。

  7. 查找 bin 中的文件夹,其中包含您之前创建的包的名称(我将有一个名为 resources 的文件夹)。在文件夹中,您将看到包内的文件夹(您之前创建的文件夹)的树视图。

  8. 查找您的文件。 (我会寻找 resources / myPictures / partyPictures / imageName.jpg

  9. 如果它不存在, InputStream stream = this.getClass()。getResourceAsStream(fromFile); 将始终为null。要解决此问题,请将图像(或任何文件)复制到文件夹中。

  10. 然后使用

    String fromFile = "/resources/myPictures/partyPictures/imageName.jpg";
    InputStream stream = this.getClass().getResourceAsStream(fromFile);
    
  11. 将字符串 fromFile 更改为文件路径,并始终以 / 开头。 您的代码将如下所示:

  12. 字符串fromFile =“/ packageName / folderName / fileName.extension ”;

    InputStream stream = this.getClass()。getResourceAsStream(fromFile);

    那应该是它!