尝试关闭它时出现FileSystem错误

时间:2016-07-09 18:26:18

标签: java jar nio

目前我正在尝试为我创建的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文件 我试图将我的照片保存在jar外面,但它确实有效,所以我猜我在使用FileSystem或Path时犯了错误。
jar中的路径是rpg / levels / level * .png

编辑:
我改变了

OutputStream os = Files.newOutputStream(p);

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

但现在关闭fileSystem时出现错误

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)

1 个答案:

答案 0 :(得分:1)

您无法在正在运行 jar-File(相关:updating-a-jar-whilst-running)中保存任何内容。

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

对于一般任务,您应该将级别文件保存在jar之外。您可以将游戏分发到game/game/theGame.jar的{​​{1}}文件夹中。然后级别在jar之外,你可以修改它。

此外,您可以像其他游戏一样使用常用目录,例如Windows /game/firstLevel.lvlDocuments,用于游戏特定设置和数据。

Java中的

AppDataMyDocuments Java中的FileSystemView.getFileSystemView().getDefaultDirectory().getPath()AppData