文件不是使用File.createNewFile()创建的;

时间:2014-08-09 19:52:02

标签: java cout cin printwriter printstream

我的属性文件与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天内完成。

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()再次修改,例如当玩家开始新游戏时。检查您的逻辑并彻底测试,以确保它的行为符合您的预期。

祝你好运!