我的属性文件与PrintWriter有一个小问题。 这是主文件的代码:
package org.goverment;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Tg {
public static final void main(String[] args) throws Exception {
cout("The Goverment - Create your own country!/");
cout("Press the number associated with your choice then press enter./");
cout("1. New Game/");
cout("2. Continue/");
cout("3. ExitGame/");
int c = Integer.parseInt(cin());
if(c == 1) {
cout("/");
cout("Country name: ");
String name = cin();
cout("\nIs this a soviet country? (y/n): ");
String soviet = cin();
boolean svt;
if(soviet.equalsIgnoreCase("y") || soviet.equalsIgnoreCase("yes"))
svt = true;
else if(soviet.equalsIgnoreCase("n") || soviet.equalsIgnoreCase("no"))
svt = false;
else
svt = false;
Game.setup(Game.cc(), name, svt);
} else if(c == 2)
System.exit(0); // Game.c();
else if(c == 3)
System.exit(0);
}
private static String cin() throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
return br.readLine();
}
public static final void cout(String s) {
if(s.endsWith("/") || s.equalsIgnoreCase("")) {
System.out.println(s.substring(0, s.length() - 1));
} else {
System.out.print(s);
}
}
}
这是游戏类: http://pastebin.com/bktg6nSc
这是问题所在: 文件isint已创建... 我一直在冲洗和关闭但没有任何反应。 我一直在查看应用程序数据,但没有thegoverment.properties。
那我该怎么办? 我确实需要帮助,它适用于学校项目,我必须在2天内完成。
答案 0 :(得分:0)
如果添加
writer.flush();
关闭之前不起作用,然后,
PrintWriter writer = new PrintWriter(fl);
...
DO
BufferedWriter writer = new BufferedWriter(fl);
writer.write("###################");
writer.newLine();
...
writer.flush();
writer.close();
如果仍然无效,请尝试创建执行程序的文件,所以:
File fl = new File("thegoverment.properties");
答案 1 :(得分:0)
该错误发生在Game.cc()中。如果for循环按写入方式执行,则该方法永远不会返回,因此即使您的代码看起来像是调用Game.setup(),JVM也不会实际执行它。
问题在于,无论while循环结束时的done值是什么,在while循环再次开始之前,done总是被重置为false。经典无限循环,与您的IO完全无关。
当我发现错误时,我有以下开始Game.cc()。请注意添加的输出行以帮助调试。
public static final List<String> cc() {
List<String> countryNames = new ArrayList<String>();
System.out.println("About to begin for loop in Game.cc()");
for (int i = 0; i < 48; i++) {
System.out.println("for loop iteration "+i);
boolean done = false;
while (!done) {
你需要声明标志变量,例如&#34; boolean done = false;&#34;在循环之外。写下这样的未来代码:
public static final List<String> cc() {
List<String> countryNames = new ArrayList<String>();
boolean done = false;
for (int i = 0; i < 48; i++) {
while (!done) {
我应该注意,在修复之后正确创建了government.properties,虽然不是人们期望找到的,因为你硬编码到Windows结构并且我在linux上测试之前没有调整地址。我在我的包的顶级文件夹中找到了.ververment.properties。
我还应该注意,在创建属性文件之后,它不会被Game.setup()再次修改,例如当玩家开始新游戏时。检查您的逻辑并彻底测试,以确保它的行为符合您的预期。
祝你好运!