如何在java中修复空白文件IO

时间:2017-03-15 22:26:52

标签: java io

我是java编程和学习Io的新手。我正在制作一个简单的RPG游戏,但在我的代码中遇到了问题。这是关于文件,每当我完成它运行它是空白。不知怎的,每当我运行它,我得到一个空文件。有人可以帮助我:c。 (抱歉英语不好)

  

这是我的代码:FOR RANDOM CLASS

public class Dice {
/** instance variables */
private final  Random r;

/**
 * Initializes the random number generator r
 */


public Dice() {
    r = new Random();
}

/**
 * Returns a random integer between 1 and 6 using Random r
 * @return 
 */
public int roll() {
    int dieRoll = r.nextInt(6 - 1);
    return dieRoll;
}

}

  

FOR Character CLASS

public class Character {

static Dice dice = new Dice();
private  String name;
private  int strength;
private  int dexterity;
private  int intelligence;
private  int maxLife;
private int currentLife;
private int atk;

public Character(){

}
public Character(String n, int s, int d, int i) {

    this.name = n;
    this.strength = s;
    this.dexterity = d;
    this.intelligence = i;
    this.maxLife = 100 + dice.roll();
    this.currentLife = maxLife;

}


/**
 * Returns a random die roll using the roll method in the Dice.java,
 * *modified by the character's strength
 */
public int attack() {
    this.atk = strength * dice.roll() + 24;
    return atk;
}

public void wound(int damage) {
    if ((currentLife - damage) <= 0) {
        this.currentLife = 0;
    } else {
        this.currentLife = currentLife - damage;
    }
}

public void heal(int heal) {
    if ((currentLife + heal) < maxLife) {
        this.currentLife = currentLife + heal;
    } else {
        this.currentLife = maxLife;
    }
}

public boolean checkDead() {
    return currentLife == 0;
}

public String getName() {
    return name;
}

public int getStrength() {
    return strength;
}

/**
 * Returns dexterity
 */
public int getDexterity() {
    return dexterity;
}

/**
 * * Returns intelligence
 */
public int getIntelligence() {
    return intelligence;
}

/**
 * Returns currentLife
 */
public int getCurrentLife() {
    return currentLife;
}

/**
 * Returns maxLife
 */
public int getMaxLife() {
    return maxLife;
}

public int getAtk() {
    return atk;
}

}

  

主要课程(这里有问题,我不知道如果我在这里不知道)

     public class TestCharacter {
     public static void main(String letsPlay[]){
    PrintWriter outputStream = null;
    try{
         outputStream = new PrintWriter(new FileOutputStream("RPGOutput.txt",true));

        Scanner s = new Scanner(System.in);
    System.out.print("Enter Player 1 Character name:");
    Character p1 = new Character(s.next(),s.nextInt(),s.nextInt(),s.nextInt());
    System.out.println(p1.getName()+ "\tHAS ENTERED THE BATTLE!");
    System.out.println("Enter Player 2 Character name:");
    Character p2 = new Character(s.next(),s.nextInt(),s.nextInt(),s.nextInt());
    System.out.println(p2.getName()+ "\tHAS ENTERED THE BATTLE!");      

    int i = 1;
    do {
        outputStream.println("\nR O U N D " + i + "!");
        outputStream.print(p1.getName() + " "+"HP is");
        outputStream.println("\t" + p1.getCurrentLife() + "/" + p1.getMaxLife());
        outputStream.println("while");
        outputStream.print(p2.getName() + " " + " HP is");
        outputStream.println("\t" + p2.getCurrentLife() + "/" + p2.getMaxLife());
        outputStream.println(" ");
        p2.wound(p1.attack());
        outputStream.println(p1.getName() + " attacks " + p2.getName() + " for " + p1.getAtk() + " damage!");
        if (p2.checkDead() == true) {
            outputStream.println(p2.getName() + " lose " + p1.getName() + " has won!");
            return;
        }
        p1.wound(p2.attack());
        outputStream.println(p2.getName() + " attacks " + p1.getName() + " for " + p2.getAtk() + " damage!");
        if (p1.checkDead() == true) {
            outputStream.println(p1.getName() + " lose " + p2.getName() + " has won!");
            return;
        }
        i++;

    } while (p1.checkDead() == false || p2.checkDead() == false);
    }catch(FileNotFoundException e){
        System.out.println("Error no file" + e);
        System.exit(0);
    }
}

}

1 个答案:

答案 0 :(得分:0)

当你打开一个流时,你应该最后关闭它。

在java 1.7及以上版本中,只有try( ... open the stream here ){ ... useit ...},编译器会隐式添加最后关闭

您需要最终关闭以确保不会分配开放资源。

将PrintWriter设置为autoflush或确保在关闭流之前确保刷新是明智的,否则可能PrintWriter在缓冲区已满之前不会写入输出流。

Java 1.6及以下

    OutputStream fos = null;
    try{
        fos = new FileOutputStream("RPGOutput.txt",true);
        PrintWriter out = new PrintWriter(fos, true);

        out.println("Someting");
        out.println("...");

        // 
        out.flush();
    }catch(IOException e){
        // Manage exception
    } finally {
        try{
            if(fos!=null){
                fos.close();
            }
        }catch(IOException e){
            // Swallow exception
        }
    }

Java 1.7及以上

    try(OutputStream fos = new FileOutputStream("RPGOutput2.txt",true);
            PrintWriter out = new PrintWriter(fos,true);) {

        out.println("Hello");
        out.print("Hello 2");

    }  catch (IOException e) {
        // Manage exception
    }