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

java:如何复制当前正在执行的文件,java,copy,self,Java,Copy,Self,我有一个罐子。我希望jar能够在运行时复制自己。我知道windows可能对此有问题。我该怎么做,还是我想得太多了 编辑:再解释一下 我正在写一个可重新打包的固件部署系统。。。其想法是,XDA的ROM开发人员可以自己制作,然后将其打包到跨平台可部署的一键式打包中,几乎与部署固件一样简单 我的程序通过自动化任务完成了很多工作。。。我正在尝试自动化一键式可部署打包系统的打包。。。。给开发人员一个表单来填写,该表单将更改标题信息,然后他们选择要部署的固件文件。我试着把它们都放在一个罐子里。正如josh所

我有一个罐子。我希望jar能够在运行时复制自己。我知道windows可能对此有问题。我该怎么做,还是我想得太多了

编辑:再解释一下

我正在写一个可重新打包的固件部署系统。。。其想法是,XDA的ROM开发人员可以自己制作,然后将其打包到跨平台可部署的一键式打包中,几乎与部署固件一样简单


我的程序通过自动化任务完成了很多工作。。。我正在尝试自动化一键式可部署打包系统的打包。。。。给开发人员一个表单来填写,该表单将更改标题信息,然后他们选择要部署的固件文件。我试着把它们都放在一个罐子里。

正如josh所说,如果你能告诉我为什么要这样做以提供帮助,那就太好了

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

一旦这两个问题得到解决,这只是一个复制操作,操作系统将毫不在意复制的顺序是否来自从文件或另一个文件运行的进程

编辑以在第一篇文章中添加更改

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

可能的解决办法:

  • 最快的(但最脏的)是启动一个.bat,它先休眠几秒钟,然后进行复制。启动后立即关闭java应用程序。如果需要继续在Java中执行操作,在复制文件后,.bat会再次启动Java应用程序(使用适当的参数)
  • 前一个的一个变体稍微有点混乱。。。从.bat启动java应用程序,.bat做的第一件事就是将jar复制到PC临时目录。一定要做好文档记录,这样你的用户就不会害怕了
  • 用于解锁文件的JNI库。有几个程序(解锁)尝试解锁文件;不知道它在哪一点上是有效的,或者它将如何影响JVM
    • 我相信您可以使用:

      File file = new  File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
      
      获取对.JAR文件路径的引用

      然后你只需复制一份:


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

      我想我会问……为什么您的代码需要复制自己?我同意josh.trow的看法。除非你所寻求的是好奇心,那没关系,但我的直接怀疑是你在试图解决一个更简单的问题。我只能选择@josh.trow。这听起来可能是恶意的,或者您的项目中存在设计问题。不,这是自定义固件部署的包装。我的目标受众不仅是用户,还有开发人员。。。这在Windows上不会有问题?这是我的理解。您当然会想测试它。目前我没有处理任何JAR-ed项目,但据我记忆所及,这将针对您的JAR。是否允许您复制它取决于操作系统。但从理论上讲,这应该仍然有效。我以前通过右键点击复制过一个正在使用的JAR,所以这种方法也应该有效。我更新了第一篇文章。我想知道如何绕过windows问题。我想我会用包装纸包装我的程序。。。例如,部署一个资源,然后修改该资源。。。你用bat文件给了我这个主意。。。但是,JAR可以充当bat文件,但在部署之前它将不起作用。