我有一段代码监视目录以添加文件.每当将新文件添加到目录时,将挑选该文件的内容并在kafka上发布,然后删除该文件.

这在我发出单个请求时有效,但是一旦我将代码从jMeter请求5或10个用户请求,内容就会在kafka上成功发布,但代码无法删除该文件.我收到一个FileSystemException,其中包含一个消息,该进程无法访问该文件,因为它正由另一个进程使用.

我想有一些我无法看到的并发问题.

public void monitor() throws IOException, InterruptedException {

Path faxFolder = Paths.get(TEMP_FILE_LOCATION);

WatchService watchService = FileSystems.getDefault().newWatchService();

faxFolder.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);

boolean valid = true;

do {

WatchKey watchKey = watchService.take();

for (WatchEvent> event : watchKey.pollEvents()) {

if (StandardWatchEventKinds.ENTRY_CREATE.equals(event.kind())) {

String fileName = event.context().toString();

publishToKafka(new File(TEMP_FILE_LOCATION + fileName).toPath(), "topic");

}

}

valid = watchKey.reset();

} while (valid);

}

private void publishToKafka(Path path, String topic) {

try (BufferedReader reader = Files.newBufferedReader(path)) {

String input = null;

while ((input = reader.readLine()) != null) {

kafkaProducer.publishMessageOnTopic(input, topic);

}

} catch (IOException e) {

LOG.error("Could not read buffered file to send message on kafka.", e);

} finally {

try {

Files.deleteIfExists(path); // This is where I get the exception

} catch (IOException e) {

LOG.error("Problem in deleting the buffered file {}.", path.getFileName(), e);

}

}

}

异常日志:

java.nio.file.FileSystemException: D:\upload\notif-1479974962595.csv: The process cannot access the file because it is being used by another process.

at sun.nio.fs.WindowsException.translateToIOException(Unknown Source)

at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)

at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source)

at sun.nio.fs.WindowsFileSystemProvider.implDelete(Unknown Source)

at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(Unknown Source)

at java.nio.file.Files.deleteIfExists(Unknown Source)

at com.panasonic.mdw.core.utils.MonitorDirectory$FileContentPublisher.publishToKafka(MonitorDirectory.java:193)

at com.panasonic.mdw.core.utils.MonitorDirectory$FileContentPublisher.sendData(MonitorDirectory.java:125)

at com.panasonic.mdw.core.utils.MonitorDirectory$FileContentPublisher.run(MonitorDirectory.java:113)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

java获取被占用的文件进程_java – 进程无法访问该文件,因为它正被另一个进程使用...相关推荐

  1. win10解决你当前无权访问该文件夹,拒绝你访问该文件夹

    问题: win10系统中,有时打开一个文件夹,会提示"你当前无权访问该文件夹","拒绝你访问该文件夹". 解决方法: 首先选中这个文件夹右键属性,在属此处性界面 ...

  2. html5如何访问电脑文件夹,手机如何直接访问电脑文件?手机访问电脑文件

    通过手机QQ也可以访问电脑文件.有时我们并不想一直盯着电脑,但是又需要查看电脑里的文件.有没有一种方法可以做到,不盯着电脑也能查看电脑上的文件呢?下面给大家介绍一下如何用手机访问电脑文件. 1.在手机 ...

  3. java 获取发布后的路径问题_Java中的路径问题实例分析

    Java中的路径问题实例分析 前言:关于Java中得路径问题,网上有很多获取的答案,我这篇文章的目的在于说明获取路径时一些不常见的概念.在实际应用中使用的比较多的就是,当前路径和配置文件的路径(其他文 ...

  4. java md5 文件验证_Java 自带MD5 校验文件

    转载声明:http://blog.csdn.net/zishan007/article/details/7971229 package com.chinasoft.corpinfosys.common ...

  5. java语言怎样判断文件夹_JAVA语言之如何判断文件,判断文件夹是否存在的代码...

    本文主要向大家介绍了JAVA语言之如何判断文件,判断文件夹是否存在的代码,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 一.判断文件是否存在,不存在则创建File file = ne ...

  6. java文件比较_Java 比较两个任意文件是否相同

    一.比较规则 先比较两个文件的长度,如果不一样则文件肯定不一样. 否则将文件读取出来,一个字节一个字节的比较二者内容是否相同. import java.io.*; public class FileC ...

  7. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

  8. 【操作系统/OS笔记17】文件系统基本概念、文件描述符、文件系统访问、文件别名、文件系统种类

    本次笔记内容: 12.1 文件系统:总体介绍 12.2 基本概念 12.3 基本概念--文件系统和文件 12.4 基本概念--文件系统的功能 12.5 基本概念--文件和块 12.6 基本概念--文件 ...

  9. ftp文件夹错误 windows无法访问此文件夹_Adobe 安装错误代码对照表及解决方案

    在安装Adobe软件时,提示安装错误 不用着急,可以根据提示的错误代码,找到解决方法 下面是官方提供的Adobe错误代码对照表及解决方案 你可以使用浏览器快捷键 CMD+F(MacOS)或 Ctrl+ ...

最新文章

  1. ntbackup 创建卷影复制:ffffffff 时出现错误
  2. 室外电磁赛道铺设补充说明
  3. 为什么在 Verilog HDL 设计中一定要用同步而不能用异步时序逻辑?
  4. java super object,java学习记录笔记--继承,super,Object类
  5. UOJ #590. 天天和树
  6. C语言字符串数字提取函数,支持负数、浮点数、科学记数法
  7. 前端学习(2246)码云课程介绍
  8. Activity中 onResume和onPause与onStart()和onStop()的一些思考
  9. 借助 Pod 删除事件的传播实现 Pod 摘流
  10. 在linux中 与 的区别,在linux中,和, |和|| , 与 的区别
  11. 传输层学习之五(TCP的SACK,F-RTO)
  12. A Byte of Python 笔记(2)基本概念:数、字符串、转义符、变量、标识符命名、数据类型、对象...
  13. Python中文手册
  14. 方舟代码_源代码丢失的方舟
  15. phpstudy升级mysql5.6_phpstudy升级mysql数据库
  16. CDA I级学习 - 漏斗模型
  17. 软件项目经理应具备的素质和条件_软件项目经理素质能力的必备要求
  18. ajax 传递对象 返回状态500
  19. Windows系统下安装Linux双系统(硬盘安装)
  20. Linux:C获取当前网速 网线/4G

热门文章

  1. Intellij IDEA神器居然还有这些小技巧
  2. Consul入门04 - Consul集群
  3. Java 洛谷 P2141 珠心算测验
  4. cad新手必练300图_[CAD]平面练习图,CAD新手练技术练速度的好去处
  5. 恢复mysql数据库详细图解_binlog恢复mysql数据库超详细步骤
  6. 网络里找不到工作组的计算机,win7系统看不到工作组计算机怎么办?win7系统看不到工作组计算机解决方法...
  7. 必须掌握的空调制冷系统维修要点
  8. IT 巡检内容、工具、方法 amp; Linux / AIX / Oracle / VMware 巡检表模板 | 周末送资料...
  9. 一套实用的数据中心设计方案
  10. TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率