我玩 Minecraft(著名的 Java 游戏),我想在 Minecraft 运行时重写 Minecraft 正在使用的 jar 文件(用其他 1.7.10-OptiFine_HD_U_D6.jar 替换 1.7.10-OptiFine_HD_U_D6.jar),并且不关闭 Minecraft 我测试了这段代码,但该文件不会被删除,因为 Minecraft 正在使用它。 https://hastebin.com/iwuxiyokuy.cpp (我把这段代码放在Minecraft的代码中,我想如果Minecraft正在 sleep ,它不会被认为是一个正在使用的文件) 但是,我尝试了一些想法,发现了这一点: 在 Eclipse 中,您可以重写 1.7.10-OptiFine_HD_U_D6.jar,而无需关闭 Minecraft (像这样http://hpics.li/4971e5f)
那么,当 Minecraft 运行且不关闭 Minecraft 时,如何像 Eclipse 那样用 java 重写 1.7.10-OptiFine_HD_U_D6.jar ?
祝你有美好的一天!
(对不起,我的英语不好,我很年轻,而且我是法国人:/)
最佳答案
问题是您的操作系统(本例中为 Windows)锁定了该文件,因为 Minecraft (Java) 正在使用该文件。 在 Java 中您无法采取任何措施来解决此限制。
显示该文件已存在的对话框只是 Eclipse 的一个警告,这样您就不会意外覆盖已经存在的/错误的文件;它与操作系统锁定文件无关。
出于好奇,为什么要在 Minecraft 运行时替换该文件?为什么不关闭 Minecraft,替换文件并再次启动 Minecraft? 我非常怀疑 Minecraft 在启动时加载文件后是否会加载该文件。
编辑 1: 这应该做:
File source = new File("path/to/source/file");
File destination = new File("C:/Users/Victor/AppData/Roaming/.minecraft/versions/1.7.10-OptiFine_HD_U_D6/1.7.10-OptiFine_HD_U_D6.jar");
try {
Files.copy(source.toPath(), destination.toPath(), StandardCopyOption.REPLACE_EXISTING);
} catch (IOException exception) {
exception.printStackTrace();
}
关于java - 重写java中使用的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43412821/