java - 我们可以同时读取和写入文件吗?

标签 java java-io

假设我有两个线程( threadA threadB ),其中 threadA 正在从文件中读取,而 threadB 正在写入同一个文件,这里有两种方法:

// Thread A reads
java.nio.file.Files.readAllBytes(Path.get("test.txt"));

// Thread B writes
java.nio.file.Files.write(Paths.get("test.txt"), bytes);

如果两个线程同时运行会发生什么?

如果线程A开始读取,那么线程B写入文件(线程A尚未完成读取),线程A会读取原始文件(线程B修改之前)或修改后的文件还是会抛出异常?

最佳答案

这不是您的问题“会发生什么”的答案,而是......

将批处理的结果写入 result.file 并“处理”它应该由单独的处理程序处理。
看看目录监视服务Watching a Directory for Changes
新的result.file.yyy-mm-dd(e.g.)写入后,或者文件被修改后,需要解析,准备好webcontent。否则,每次有人访问该页面时都会对其进行解析 - 我认为这不是那么优雅。
借助像 synchronized 这样的锁定机制可以避免“可能”的时刻。

关于java - 我们可以同时读取和写入文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59521527/

相关文章:

java - 如何在Java中将文本文件中的数据读取到数组中

java File mkdirs 和 createNewFile 将不起作用

java - 获取当前用户的路径而不是java中的应用程序路径

java - Properties.load会关闭InputStream吗?

java - 作为静态类的 Spring MVC 公共(public)应用程序配置文件

java: 三元运算符中的奇怪 NullPointerException (?:)

java - 将文件传输到客户端java后保持套接字连接打开

java @Autowired 返回 null。无法让 spring 工作

linux - 无法使用Java代码在Linux运行时创建文件

java - 要求用户进行多次输入