Wildfly хранит файл, используя когда я делаю Files.write - PullRequest
0 голосов
/ 26 марта 2020

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

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 Ответ

0 голосов
/ 26 марта 2020

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

...