Синхронизировать оставшееся приложение и сохранить в файл - PullRequest
0 голосов
/ 22 апреля 2020

У меня какая-то странная ситуация, у меня есть методы:

public void generateRecords(Request request) {
    String pathToFile = request.getPathFile();
    String recordOne = generateRecordOne(request);
    String recordTwo = generateRecordTwo(request);

    fileService.writeToFile(pathToFile, recordOne);
    fileService.writeToFile(pathToFile, recordTwo);
}

public void writeToFile(String path, String content) {
        try {
            FileWriter writer = new FileWriter(path, true);
            writer.append(content);
            writer.close();
        } catch (IOException e) {
            e.printStack();
        }
}

generateRecords () - это конечная точка отдыха. Я получаю что-то вроде этого:

id:1:record1 

id:2:record1 

id:1:record2

id:2:record2

Хотя я хотел бы получить что-то вроде этого:

id:1:record1 

id:1:record2 

id:2:record1

id:2:record2

Иногда это происходит, но все же это уничтожает мой файл. Как я могу избежать этого?

1 Ответ

1 голос
/ 22 апреля 2020

Попробуйте использовать synchronized для метода writeToFile.

Также рассмотрите возможность использования оператора try-with-resources. В коде, который у вас есть сейчас, исключение в вашей программе записи приведет к тому, что FileWriter не закроется.

public synchronized void writeToFile(String path, String content) {
    try (FileWriter writer = new FileWriter(path, true)) {            
        writer.append(content);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
...