(Java) Обновляйте и обновляйте файл в режиме реального времени - PullRequest
0 голосов
/ 08 января 2020

Я не знаю, как express это ... Как мне сделать файл, содержащий строки String, и вывести его? Если я получил файл из 200 строк, текст нарисует 200 строк строки, если я изменю на 300 строк файла (заменить / добавить строку в исходный файл), текст также нарисует 300 строк строки?

В моем проекте BufferedReader прочитал старый файл данных, даже если этот файл был удален и заменен на BufferedWriter ... BufferedReader все еще читает старый файл, пока я не запущу проект снова.

Другими словами, как мне сохранить обновил файл?

Я использую Java, Slick2D (потому что я делаю систему создания карт, и BufferedWriter пишет новые строки, BufferedReader читает старый файл, а не новый)

Здесь мои коды (idk, если это происходит только со мной или с кем-то еще):

Запись:

String levelName = GlobalVariables.creativeLevelName;
File file = new File("src/Resources/Map/CreativeMap/" + levelName + "/" + levelName + ".tpmap");
file.delete();
FileWriter fileWriter = new FileWriter(file.getPath());
BufferedWriter bufferedWriter = new BufferedWriter(fileWriter);

for (int i = 0; i < content.size(); i++) {
    bufferedWriter.append(content.get(i));
    bufferedWriter.newLine();
}

bufferedWriter.close();

Массив содержимого - это данные игры Tile.

Чтение:

String tpMapPath = "/Resources/Map/CreativeMap/" + currentLoadingFile + "/" + currentLoadingFile + ".tpmap";
String configPath = "/Resources/Map/CreativeMap/" + currentLoadingFile + "/" + currentLoadingFile + ".confmap";

String tileSheetPath = "src/Resources/Map/CreativeMap/" + currentLoadingFile + "/" + currentLoadingFile + "TileSheet.png";
String autotileSheetPath = "src/Resources/Map/CreativeMap/" + currentLoadingFile + "/" + currentLoadingFile + "AutotileSheet.png";

Creating.setCurrentMapWidth(0);
Creating.setCurrentMapHeight(0);
String ss = "src/Resources/Map/CreativeMap/" + currentLoadingFile + "/" + currentLoadingFile;
Creating.enterStageInit(tileSizeConf, ss + "TileSheet.png", ss + "AutotileSheet.png");
input.clearKeyPressedRecord();
sbg.getState(Game.create).init(gc, sbg);

try {
    int numberOfLines = FileMethods.lineCounting("src" + tpMapPath);
    DebugMethods.debugMessage("Loading \"" + currentLoadingFile + "\" map. Size: " + numberOfLines + " line(s).");

    int tileSize = Integer.parseInt(configReader.readLine().split(" ")[2]);
    configReader.readLine(); //Skip Map Width
    configReader.readLine(); //Skip Map Height
    String mapName = configReader.readLine().split(" ")[2];

    Image tileSheet = new Image(tileSheetPath);
    Image autotileSheet = new Image(autotileSheetPath);

    String line = bufferedReader.readLine();

    while (line != null) {
          line = line.replace("[", "");
          line = line.replace("]", "");

    String[] tokens = line.split(":");

    if (tokens[0].equals("Tile")) {
    Tile tile = new Tile(Integer.parseInt(tokens[6]), new Image(tileSheetPath));
    tile.setSpecialId(tokens[3].equals("none") ? "" : tokens[3]);
    tile.setWidth(Integer.parseInt(tokens[4]));
    tile.setWidth(Integer.parseInt(tokens[5]));
    TileId state = TileId.Air;

    if (tokens[7].equals("solid")) {
        state = TileId.Solid;
    } else if (tokens[7].equals("topsolid")) {
        state = TileId.TopSolid;
    }

    tile.setSpriteSheet(tileSheet);
    tile.setState(state);
    Creating.getMapCreator().setTile(Integer.parseInt(tokens[1]), Integer.parseInt(tokens[2]), tile, true);
                                            } else if (tokens[0].equals("Autotile")) {
                                                int widthIndex = Integer.parseInt(tokens[1]);
                                                int heightIndex = Integer.parseInt(tokens[2]);

                                                int tileWidth = Integer.parseInt(tokens[4]);
                                                int tileHeight = Integer.parseInt(tokens[5]);

                                                Autotile autotile = new Autotile(Integer.parseInt(tokens[6]), new Image(autotileSheetPath));
                                                autotile.setSpecialId(tokens[3].equals("none") ? "" : tokens[3]);
                                                autotile.setWidth(tileWidth);
                                                autotile.setHeight(tileHeight);

                                                TileId state = TileId.Air;
                                                if (tokens[7].equals("solid")) {
                                                    state = TileId.Solid;
                                                } else if (tokens[7].equals("topsolid")) {
                                                    state = TileId.TopSolid;
                                                }

                                                autotile.setSpriteSheet(autotileSheet);

                                                autotile.setState(state);
                                                Creating.getMapCreator().setAutotile(widthIndex, heightIndex, autotile, true);
                                            }

                                            line = bufferedReader.readLine();
                                        }

                                        bufferedReader.close();
                                        configReader.close();

                                        sbg.enterState(Game.create);
                                    } catch (IOException ioe) {
                                        DebugMethods.exceptionError(ioe);
                                        showErrorMessageMiddle("File is corrupted! Cannot be loaded!", Color.red);
                                    }
...