【发布时间】:2014-08-23 17:50:30
【问题描述】:
我正在为学校作业制作游戏,其中一个功能是可以保存和加载游戏。虽然在 Eclipse 中一切正常,但在将其设为可执行 jar 后,它不会在指定位置创建文件。
我正在使用此代码将其保存在我想要的文件夹中:
see below for full code
请注意,文件夹 quarto 和 savefiles 已创建,但保存文件本身并未创建。
我正在使用此代码将对象写入 .sav 文件:
see below for full code
这和权限有关吗?
编辑:在 cmd 中运行它,当我尝试保存时没有例外。在 jar 所在的文件夹中添加了一个 java.policy 文件,没有区别。我得到了一个以前保存的文件并将其放在 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();
}
}
}
EDIT2:我感谢您的所有帮助,但我刚刚意识到我犯了一个非常愚蠢的错误... else{return;} 没有按照我教的那样做,可以完全删除。 给您添麻烦了!
有没有办法将这个问题标记为已关闭,还是我应该让它坐下来?
【问题讨论】:
-
这可能与权限有关。运行代码时有任何错误消息吗?此外,我们可能需要查看更多代码。我认为 savename 字段有效?
-
我会验证第二个代码块中的表达式
folder+File.separator+savename是否生成了您期望的字符串。如果您没有看到异常,则可能正在创建文件,只是不在您期望的位置。 -
请记住,jar 中的“user.home”可能不同。我建议你在某处输出
System.out.println(System.getProperty("user.home")) -
你一定有一个你在某处忽略的异常。检查并报告。
标签: java jar executable objectoutputstream