我正在为学校作业制作游戏,其中一个功能是游戏可以保存和加载。虽然在eclipse中一切正常但在将其作为可执行jar之后,它将不会在指定位置创建文件。
我正在使用此代码将其保存在我想要的文件夹中:
see below for full code
请注意文件夹,四开关和保存文件已创建,但保存文件本身不是。
我正在使用以下代码将对象写入.sav文件:
see below for full code
这与权限有关吗?
编辑:把它放在cmd中,当我试图保存时没有异常。将java.policy文件添加到jar所在的文件夹中,没有区别。我有一个以前保存的文件并将其放在quarto / savefiles映射中,因为我想看看它是否正确加载(这也使用user.home到达正确的文件夹)。它正确加载。我还搜索了savename.sav,看它是否将它保存在其他地方,没有找到任何东西。
全班:
package quarto;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
public class TaskSpelOpslaan extends SpelGegevens{
public static void runSpelOpslaan() {
String savename = SpelOpslaanScherm.getSaveName();
String userHome = System.getProperty("user.home") + File.separator + "quarto" + File.separator + "savefiles";
String locatie = userHome;
File folder = new File(locatie);
if (!folder.exists()) {
folder.mkdirs();
}
try{
if(!savename.contains(".sav"))
{
savename = (savename+".sav");
}
else
{
return;
}
FileOutputStream saveFile=new FileOutputStream(folder+File.separator + savename);
ObjectOutputStream save = new ObjectOutputStream(saveFile);
save.writeObject(bordInfo);
save.writeObject(stukGeplaatst);
save.writeObject(stukGeselecteerd);
save.writeObject(spelerBeurt);
save.writeObject(gekozenStuk);
save.writeObject(bordImage);
save.writeObject(stukImage);
save.writeObject(naamSpeler1);
save.writeObject(naamSpeler2);
save.close();
}
catch(Exception exc){
exc.printStackTrace();
}
}
}
编辑2:我很感谢你所有的帮助,但我刚刚意识到我犯了一个非常愚蠢的错误......其他{return;}并没有按照我的教导去做,而是可以完全删除。
对不起,对不起!
无论如何都要关闭这个问题,还是应该让它坐下来?
答案 0 :(得分:0)
Java程序(尤其是applet)往往需要权限来执行读取和写入文件之类的操作。这就是.policy
个文件的原因。将名为java.policy
的文件添加到与jar相同的目录中。在文件中,您必须授予权限。所以把它放到.policy文件中:
grant CodeBase "Example.jar"
{
permission java.security.AllPermission;
};
这将授予Example.jar的所有权限。