Почему сохранение в файл и, в частности, удаление файла перед преобразованием его с новыми переменными не изменяет содержимое? - PullRequest
0 голосов
/ 25 августа 2018

Если вопрос не помог, может быть, это может:

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

Вот мой метод:

public void save() throws IOException {
    // creates old file
    File fold=new File(sma.getFilePath());
    // should delete file...but doesn't
    fold.delete();
    File fnew=new File(sma.getFilePath());
    // should create a NEW file...doesn't
    fnew.createNewFile();
    // pseudocode...will add what I want to be saved in the future as a String[]
    String lines = "test";

    try {
        FileWriter f2 = new FileWriter(fnew, false);
        f2.write(lines);
        f2.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Может быть, я просто не удаляю файл правильно, но я не знаю, что я делаю неправильно, и почему-то это сработало для Картика Балакришнана в его посте .

EDIT:
Я добавил println, который печатал Saving на консоль при вызове save(), и я не получил его. Это смутило меня, потому что я специально вызываю его после того, как мой while(running) сделан в моем методе run ().

Вот метод run ():

public class Game extends Runnable {

public boolean running = true;

public void save() throws IOException {
    // creates old file
    File fold=new File(sma.getFilePath());
    // should delete file...but doesn't
    fold.delete();
    File fnew=new File(sma.getFilePath());
    // should create a NEW file...doesn't
    fnew.createNewFile();
    // pseudocode...will add what I want to be saved in the future as a String[]
    String lines = "test";

    try {
        FileWriter f2 = new FileWriter(fnew, false);
        f2.write(lines);
        f2.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void run(){

    //init();

    //try {
        //load();
    //} catch (FileNotFoundException e1) {
        //e1.printStackTrace();
    //}

    //getPPositions();

    int fps = 60;
    double timePerTick = 1000000000 / fps;
    double delta = 0;
    long now;
    long lastTime = System.nanoTime();
    long timer = 0;
    int ticks = 0;

    while(running){
        // if you want:
        running = false;
        now = System.nanoTime();
        delta += (now - lastTime) / timePerTick;
        timer += now - lastTime;
        lastTime = now;

        if(delta >= 1){
            tick();
            render();
            ticks++;
            delta--;
        }

        if(timer >= 1000000000){
            System.out.println("Ticks and Frames: " + ticks);
            ticks = 0;
            timer = 0;
            //canChangeSlide = true;
            //canOpenGame = true;
        }
    }

    try {
        save();
    } catch (IOException e) {
        e.printStackTrace();
    }

    //stop();
}
}

public class Fortnite_Randomizer {

    public static void main(String[] args) {
        Game game = new Game();
    }

}

и вот что я получил с консоли:

Ticks and Frames: 60
(should be "Saving...Did delete file:
true/false")

1 Ответ

0 голосов
/ 26 августа 2018

Я понял это:

Он не вызывался, потому что пропускал сразу за ним вызов метода stop (), потому что я остановил (закрыл) игру. Мне нужно было выполнить ручное сохранение в игре, то есть в моем классе KeyManager я добавил еще одну привязку клавиш, назвал ее «Сохранить», а затем написал:

// pseudocode
if(keyManager.save) {
    save(); // surround with try-catch
}
...