我的.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(...)”来保存图像。
答案 0 :(得分:0)
不知道为什么其他答案被删除了,但在写完后你需要resStreamOut.close()
。
你需要在stream == null
(大概抛出异常)时实现这个案例。
此外,永远不会捕获并吞下错误:printStackTrace()
不错误处理,忽略错误。
答案 1 :(得分:0)
错误是“saveResource()”的第一行:
InputStream stream = this.getClass().getResourceAsStream(fromFile);
这里,“stream”始终为null。以下是解决此问题的方法(使用Eclipse):
在 src 中创建一个新的包(让我们称之为资源)。
在包中创建一个新的文件夹(让我们称之为 myPictures )
如果需要,可以创建更多文件夹。我将在 myPictures 中创建一个新文件夹,我将其称为 partyPictures
选择一个文件夹并将图像(或其他内容)放入其中。我将在 partyPictures
然后,转到“导航器”,找到您的Proyect,您将看到有一个名为 bin 的文件夹。在里面,您应该看到您的包在文件夹中组织。
查找 bin 中的文件夹,其中包含您之前创建的包的名称(我将有一个名为 resources 的文件夹)。在文件夹中,您将看到包内的文件夹(您之前创建的文件夹)的树视图。
查找您的文件。 (我会寻找 resources / myPictures / partyPictures / imageName.jpg )
如果它不存在, InputStream stream = this.getClass()。getResourceAsStream(fromFile); 将始终为null。要解决此问题,请将图像(或任何文件)复制到文件夹中。
然后使用
String fromFile = "/resources/myPictures/partyPictures/imageName.jpg";
InputStream stream = this.getClass().getResourceAsStream(fromFile);
将字符串 fromFile 更改为文件路径,并始终以 / 开头。 您的代码将如下所示:
字符串fromFile =“/ packageName / folderName / fileName.extension ”;
InputStream stream = this.getClass()。getResourceAsStream(fromFile);