尝试关闭文件系统时出现错误



目前我正在尝试为我创建的Java游戏制作一个关卡编辑器。
我的问题是我的程序没有保存编辑过的关卡。

这是我到目前为止编写的代码:

Path path = Paths.get(gameFile.getAbsolutePath());
FileSystem fs = FileSystems.newFileSystem(path, null);
Path p = fs.getPath("rpg"+fs.getSeparator()+"levels"+fs.getSeparator()+"level"+(short)level+".png");
OutputStream os = Files.newOutputStream(p);
ImageIO.write(img, "png", os);
os.close();
fs.close();

gameFile是我的游戏的.jar文件,其中包含关卡和关卡保存为.png文件。
我试图将我的图片保存在罐子外面,它有效,所以我想我在文件系统或路径上犯了一个错误。
罐子中的路径是角色扮演/关卡/关卡*.png

编辑:
我变了

OutputStream os = Files.newOutputStream(p);

OutputStream os = Files.newOutputStream(p,StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_EXISTING);

但是现在我在关闭文件系统时出现错误

java.nio.file.FileSystemException: G:RPG.jar: The process cannot access the file because it is being used by another process.
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)
at sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)
at sun.nio.fs.AbstractFileSystemProvider.delete(Unknown Source)
at java.nio.file.Files.delete(Unknown Source)
at com.sun.nio.zipfs.ZipFileSystem.sync(ZipFileSystem.java:1294)
at com.sun.nio.zipfs.ZipFileSystem.close(ZipFileSystem.java:277)
at de.jorolf.editor.LevelEditor$5.actionPerformed(LevelEditor.java:213)

您不能在正在运行jar-File中保存任何内容(相关:更新一个jar-whilst-running)。

另外,如果要在未运行的jar-File中保存某些内容,则还需要保存压缩的文件。对于此任务,您只需将ZipOutputStream添加到流队列(Java-Doc:ZipOutputStream.html)。此外,java.util.jar.JarFilejava.util.jar.JarEntry可能会有所帮助。

对于常规任务,应将关卡文件保存在jar 之外。您可以将游戏分发到带有/game/theGame.jar/game/firstLevel.lvl game的文件夹中。然后关卡在 jar 之外,您可以对其进行修改。

此外,您可以像其他游戏一样使用公共目录,例如Windows DocumentsAppData游戏特定的设置和数据。

爪哇MyDocumentsFileSystemView.getFileSystemView().getDefaultDirectory().getPath() 爪哇AppDataSystem.getenv("APPDATA")

相关内容

最新更新