有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Wildfly在我处理文件时使用文件。写

我有两种方法——一种是写,另一种是重命名文件:

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上部署的应用程序中的普通类。我在很多方面进行了测试。如果我对write函数进行注释,那么rename函数可以正常工作。但是,如果我先在文件中写入一些内容,然后我想重命名,那么我会得到“操作无法完成,因为该文件已在另一个程序中打开”,而且我无法在windows资源管理器中触摸该文件-我无法重命名或删除。原因是什么?我怎样才能解锁它


共 (1) 个答案

  1. # 1 楼答案

    1)调用writeToFile和renameFile方法的线程(或服务器请求)是否不同?或者两个方法在同一个线程/请求下一个接一个地调用
    2) 你写了多少数据?只是想确保在重命名之前完成同步