我正在处理一个小项目,我需要将文件从应用程序JAR移动到JAR之外的另一个位置。
这就是我的JAR文件的样子:
MyApp.JAR
|- META-INF
|- MANIFEST.MF
|- files
|- myFile.exe
|- MainClass.class
我想做的是将myFile.exe
移至C:\\
(例如)。
所以在MainClass
我尝试过:
23. Path path = Paths.get(getClass().getClassLoader().getResource("/files/myFile.exe").toURI());
24. byte[] bytes = Files.readAllBytes(path);
25. FileOutputStream fos = new FileOutputStream("C:\\myFile.exe");
26. fos.write(b);
27. fos.close();
运行我的应用程序后,我得到一个NullPointerException
,在这里:
java.lang.NullPointerException
at MainClass.<init>(MainClass.java:23)
at MainClass.main(MainClass.java:66)
(第66行是我使用new MainClass();
调用构造函数的地方)
我知道可能会抛出NPE
,因为无法找到myFile.exe
,但我无法弄清楚为什么......
当我打开JAR时,我可以看到里面有files
的{{1}}文件夹。
也许我以错误的方式访问文件?
我在StackOverflow上尝试了许多其他方法,但没有任何作用......
提前致谢,对不起我的英语。
答案 0 :(得分:0)
我认为您在这里采取了太多中间笨重的步骤,因为标准Java API不允许您立即执行此操作。我建议您使用IOUtils.copy
复制字节:
try(InputStream resourceStream = getClass().getResourceAsStream("/files/myFile.exe");
FileOutputStream fos = new FileOutputStream("C:\\myFile.exe"))
{
IOUtils.copy(resourceStream, fos);
} // optionally, catch IOException here (or declare it to be thrown)
如果您需要有关getResourceAsStream()
提供的网址的帮助,请查看here。