Странное поведение при записи / чтении из текстового файла в Java - PullRequest
0 голосов
/ 12 июня 2019

Я пишу графический интерфейс для тральщика и сохраняю сложность в текстовом файле.Однако вместо того, чтобы писать в файл трудности должным образом, он всегда очищает файл, и мое условие проверки нуля срабатывает.

Я попытался использовать отладку и вручную отредактировать текстовый файл, чтобы он содержал строку «HARD», но послеизменяя сложность (снова устанавливая ее на жесткую, или переключаясь на легкую), файл становится пустым.

public class MineSweeperMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }
    @Override
    public void start(Stage primaryStage) throws Exception {
        String difficulty;
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("LastProgramState.txt"));
            difficulty = br.readLine();
            if (difficulty == null) {
                System.out.println("???");
                throw new FileNotFoundException(); // If I comment this out, file becomes empty
            }
        } catch (FileNotFoundException e) {
            BufferedWriter bw = new BufferedWriter(new FileWriter("LastProgramState.txt"));
            bw.write("EASY");
            bw.close();
            difficulty = "EASY";
        } finally {
        if (br != null)
        br.close();
        }

        int xSize;
        int ySize;
        int bombCount;
        System.out.println(difficulty);
        if (difficulty == null) {
            System.exit(200);
        }
        if (difficulty.equals("HARD")) {
            xSize = 16;
            ySize = 16;
            bombCount = 40;
        }
        else {
            xSize = 9;
            ySize = 9;
            bombCount = 10;
        }
            Menu menu1 = new Menu("Options");
            Menu menu2 = new Menu("Help");
            MenuItem mi1 = new MenuItem("Difficulty: Easy");
            MenuItem mi2 = new MenuItem("Difficulty: Hard");
            MenuItem mi3 = new MenuItem("How to play");
            MenuItem mi4 = new MenuItem("About...");
            menu1.getItems().add(mi1);
            menu1.getItems().add(mi2);
            menu2.getItems().add(mi3);
            menu2.getItems().add(mi4);

            MenuBar bar = new MenuBar();
            bar.getMenus().addAll(menu1,menu2);
            Label score = new Label("Score:");
            Scene scene = new Scene(bp);
            primaryStage.setScene(scene);
            primaryStage.setTitle("MineSweeper");

            primaryStage.show();
}
            mi1.setOnAction(event -> { //EASY
            try {
                BufferedWriter bwriter = new BufferedWriter(new FileWriter("LastProgramState.txt"));
                bwriter.write("EASY");
            } catch (IOException e) {
                System.exit(100);
            }
                primaryStage.close();
                Platform.runLater( () -> { //RUN APPLICATION AGAIN
                    try {
                        new MineSweeperMain().start( new Stage() );
                    } catch (Exception ex) {
                        System.exit(100);
                    }
                } );
            });
            mi2.setOnAction(event -> { //HARD
            try {
                BufferedWriter bwriter = new BufferedWriter(new FileWriter("LastProgramState.txt"));
                bwriter.write("HARD");
            } catch (IOException e) {
                System.exit(100);
            }
                primaryStage.close();
                Platform.runLater( () -> {
                    try {
                        new MineSweeperMain().start( new Stage() );
                    } catch (Exception ex) {
                        System.exit(100);
                    }
                } );
            });
}

Если я выберу сложную сложность, я ожидаю, что в текстовом файле будет содержаться строка «HARD», новместо этого он содержит строку «EASY».Такое же поведение происходит, когда я выбираю легкую сложность.Также я заметил, что если я удаляю бросок new FileNotFoundException (), файл становится полностью пустым.Что я делаю неправильно?Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: Проблема решена, я забыл закрыть файл после записи в в mi1.setOnAction() и mi2.setOnAction().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...