java:如何复制当前正在执行的文件

时间:2011-07-08 20:22:04

标签: java copy self

我有一个罐子。我希望jar能够在运行时制作自己的副本。我理解Windows可能有问题。我该怎么做,还是我在思考呢?

编辑:解释一下......

我正在编写一个可重新打包的固件部署系统...... http://code.google.com/p/heimdall-one-click/我们的想法是,XDA的ROM开发人员可以创建自己的ROM开发人员,然后将其打包成跨平台可部署的一键打包系统。很容易就像部署固件一样。

我的程序通过自动执行任务来完成大量工作......我正在尝试自动化一键式可部署包装系统的打包....给开发人员一个表单来填写哪个会改变标题信息,然后他们选择要部署的固件文件。我试图把它全部放在一个罐子里。

2 个答案:

答案 0 :(得分:2)

正如约什所说,如果你告诉为什么要这样做以帮助你,那就太好了。

只回答你发布的内容,复制jar只是复制另一个文件。存在可能被操作系统阻止的问题(Windows);另一个问题是如何在机器中找到它,以及运行该进程的用户是否具有所需的权限。

一旦解决了这两个问题,它只是一个复制操作,如果要复制的订单来自从文件或另一个文件运行的进程,操作系统也不会在意。

编辑第一篇文章中的更改。

正如我之前所说,最后复制文件是操作系统问题。如果你想在Windows中复制当前的jar,那么jar不能被其他进程锁定,因此它成为操作系统问题而不是Java问题。

可能的解决方法:

  • 更快(但最脏)的是启动一个几秒钟睡眠然后复制的.bat。启动后立即关闭您的Java应用程序。如果你需要继续用Java做事,复制文件后,.bat会再次启动java应用程序(使用适当的参数)。
  • 上一个的变体稍微有些笨拙......从.bat启动你的java应用程序,而.bat做的第一件事就是将你的jar复制到PC临时目录。请务必记录好,以免您的用户感到害怕!
  • JNI库解锁文件。有几个程序(Unlocker)尝试解锁文件;不知道它对哪个有效或者它将如何影响JVM。

答案 1 :(得分:0)

我相信你可以使用:

File file = new  File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());

获取对.JAR文件路径的引用。

然后你只需复制一份:

http://download.oracle.com/javase/tutorial/essential/io/copy.html

您的操作系统可能不允许这样做,但我认为应该这样做。