Wildfly хранит файл, используя когда я делаю Files.write

У меня есть два способа - один написать, второй переименовать файл:

public void writeToFile(File file, String content, boolean isLastLine) {
        Optional<File> optionalFile = Optional.ofNullable(file);
        if (!isLastLine)
            content += System.lineSeparator();
        try {
            Files.write(
                    optionalFile.orElseThrow(() -> new RuntimeException("File couldn't be find")).toPath(),
                    content.getBytes(),
                    StandardOpenOption.APPEND, StandardOpenOption.SYNC);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }


public void renameFile(File fileToRename, String newFileName) {
Optional<File> optionalFile = Optional.ofNullable(fileToRename);

File finalBikFileName = new File(newFileName);

if (!optionalFile.orElseThrow(() -> new RuntimeException("File couldn't be find or doesn't exist")).renameTo(finalBikFileName)) {
    throw new RuntimeException("File couldn't be saved - already exists or some other issues");
}
}



public void renameFile(File fileToRename, String newFileName) {
    Optional<File> optionalFile = Optional.ofNullable(fileToRename);

    File finalBikFileName = new File(newFileName);

    if (!optionalFile.orElseThrow(() -> new RuntimeException("File couldn't be find or doesn't exist")).renameTo(finalBikFileName)) {
        throw new RuntimeException("File couldn't be saved - already exists or some other issues");
    }
}

Это нормальный класс, в приложении, развернутом на wildfly. Я проверял это многими способами. Если я прокомментирую функцию записи, то функция переименования работает правильно. Но если я сначала что-то записываю в файл, а затем хочу переименовать, то получаю «действие не может быть выполнено, потому что файл открыт в другой программе». Также я не могу коснуться этого файла в проводнике Windows - я не могу переименовать или удалить. В чем может быть причина? Как я могу разблокировать это?

Всего 1 ответ


1) Разные потоки (или запросы к серверу) вызывают методы writeToFile и renameFile? Или оба метода вызывают один за другим в одном потоке / запросе?
2) Сколько данных (я имею в виду content.length) вы пишете? Просто хочу убедиться, что СИНХРОНИЗАЦИЯ выполнена до ПЕРЕИМЕНОВАНИЯ.