Java 在执行过程中自爆炸和重新装箱jar文件

Java 在执行过程中自爆炸和重新装箱jar文件,java,jar,decompiling,Java,Jar,Decompiling,我目前正在做一个程序,为我的老师的课堂制作坐式图表。我已经把所有的数据文件都放在罐子里了。这些被读入并放入表格中。运行程序的主要功能后,它会更新文件以匹配表中的值。我知道我需要分解jar,然后在执行期间重新jar以编辑文件,但是我找不到任何关于如何在执行期间重新jar的解释。有人有什么想法吗?简短回答: 将数据文件放在二进制文件之外,并与JAR一起发送到一个单独的文件夹中 长的一个: 看来你是从错误的方向来解决问题的。JAR文件类似于Windows平台上的可执行文件(.exe)——一个包含代码的

我目前正在做一个程序,为我的老师的课堂制作坐式图表。我已经把所有的数据文件都放在罐子里了。这些被读入并放入表格中。运行程序的主要功能后,它会更新文件以匹配表中的值。我知道我需要分解jar,然后在执行期间重新jar以编辑文件,但是我找不到任何关于如何在执行期间重新jar的解释。有人有什么想法吗?

简短回答: 将数据文件放在二进制文件之外,并与JAR一起发送到一个单独的文件夹中

长的一个: 看来你是从错误的方向来解决问题的。JAR文件类似于Windows平台上的可执行文件(
.exe
)——一个包含代码的只读二进制文件

您可以(尽管这是一种不好的做法)将一些资源(如数据文件、多媒体等)放入JAR中(就像您可以放入
.exe
)。但更好的解决方案是将这些资源放在二进制文件之外,这样您就可以在不重新编译/重建的情况下切换它们


如果您需要在应用程序运行时动态修改资源,那么您基本上别无选择。数据文件必须在二进制文件之外。再一次,您将永远不会看到Windows
.exe文件在运行时修改自身。

Tomasz说得对,以下是错误的做法,但这是可能的

类路径的内容在引导过程中被读入内存,但是这些文件是可以修改的,但是它们的更改在初始化后不会被反映出来。我建议将数据放入另一个文件中,与类文件分开,但如果您坚持将它们放在一起,您可以查看:

  • JarInputStream或ZipInputStream来读取JAR文件的内容
  • 获取相应文件的JarEntry
  • 根据需要阅读和修改内容
  • JarOutputStream或ZipOutputStream将内容写回

确保您没有通过类路径读取资源,并且它来自磁盘/网络上的文件。

谢谢。我只是希望避免出于安全原因而这样做,因为我只使用.txt文件。我不是最擅长安全编程的。@Taxes45
.jar
文件在任何方面都是不安全的,因为我给的人会更安全,这样他们就不会意外删除任何东西。Puls创建一个内部defualt文件对于我的代码的大小来说是一件痛苦的事情。我用java编程才两年,它是我的第一语言。我知道的不多。我的老师在电脑方面不是最好的。这就是我为她制作这个节目的原因。