Файл отказывается переименовывать - PullRequest
0 голосов
/ 26 ноября 2018

Я пытался записать новые данные в файл, но он отказывается переименовывать файл, что приводит к тому, что файл не перезаписывается и не удаляется в конце моего кода:

private URL gameHistoryURL = Game.class.getClassLoader().getResource("Files/GameHistory.csv");
private String gameHistoryPath = gameHistoryURL.getPath();

protected void writeToGameHistory(int game) {
    String tempFile = "temp1.txt";
    File oldFile = new File(gameHistoryPath);
    File newFile = new File(tempFile);

    try {
        FileWriter fw = new FileWriter(tempFile);
        FileReader fr = new FileReader(tempFile);
        BufferedWriter bw = new BufferedWriter(fw);
        PrintWriter pw = new PrintWriter(bw);
        LineNumberReader count = new LineNumberReader(fr);
        s = new Scanner(new File(gameHistoryPath));

        String gameName;
        int lineNum = count.getLineNumber() + 1;

        //Skip the first line if line number is 10
        if (lineNum >= 10) {
            s.nextLine();
        }

        while (s.hasNext()) {
            String x = s.nextLine();
            pw.println(x);
        }
        switch (game) {
            case 1: {
                pw.println("Game1");
                break;
            }
            case 2: {
                pw.println("Game2");
                break;
            }
            case 3: {
                pw.println("Game3");
                break;
            }
        }
        s.close();
        pw.flush();
        pw.close();
        File f = new File(gameHistoryPath);
        oldFile.delete();
        newFile.renameTo(f);
        System.out.println(newFile + " " + gameHistoryPath);
    }
    catch (Exception e) {
        System.out.println("Error: " + e);
    }
}

строки print в методе try просто возвращают:

temp1.txt [File Path]/Files/GameHistory.csv

Как я могу убедиться, что в файле temp1.txt указан правильный каталог для перезаписи правильного файла?

1 Ответ

0 голосов
/ 26 ноября 2018

Вы открываете fw как tempFile, и пока оно открыто, вы не можете переименовать или удалить его на всех ОС, особенно Windows.

Я предлагаю вам использовать try-with-resource и всегдазакройте файл перед попыткой переименовать или удалить его.

BTW new FileWriter(tempFile); обрезает файл, чтобы он всегда был пустым, если вы попытаетесь его прочитать.


Цель этогоПохоже, что метод заключается в добавлении строки в конец файла, чтобы записать каждую игру во время игры.

protected void writeToGameHistory(int game) {
    // create a new file, or append to the end of an existing one.
    try (PrintWriter pw = new PrintWriter(new FileWriter(gameHistoryPath, true))) {
        pw.println("Game" + game);
        System.out.println(gameHistoryPath + " added Game" + game);
    } catch (IOException ioe) {
        ioe.printStackTrace();
    }
}

Я не знаю, нужно ли отлаживать строку.

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