目前我正在尝试为我创建的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)
答案 0 :(得分:1)
您无法在正在运行 jar-File
(相关:updating-a-jar-whilst-running)中保存任何内容。
此外,如果您想要保存未运行 jar-File
内的内容,则还需要保存压缩的文件。对于此任务,您只需向流队列添加ZipOutputStream
(Java-Doc:ZipOutputStream.html)。 java.util.jar.JarFile
和java.util.jar.JarEntry
也可能会有所帮助。
对于一般任务,您应该将级别文件保存在jar
之外。您可以将游戏分发到game
和/game/theGame.jar
的{{1}}文件夹中。然后级别在jar之外,你可以修改它。
此外,您可以像其他游戏一样使用常用目录,例如Windows /game/firstLevel.lvl
或Documents
,用于游戏特定设置和数据。
AppData
:MyDocuments
Java中的FileSystemView.getFileSystemView().getDefaultDirectory().getPath()
:AppData