我有连接到文件夹的简单类,我想删除所有创建的常规文件,但当我读取同名文件(同一文件不止一次或两次插入文件夹)时,我得到错误
Exception in thread "main" java.lang.RuntimeException: java.nio.file.FileSystemException: c:\Temp\reader\msg.xml: The process cannot access the file because it is being used by another process.
at com.project.test.Reader.lambda$0(Reader.java:38)
at com.project.test.Reader$$Lambda$1/1418481495.accept(Unknown Source)
at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1374)
at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)
at com.project.test.Reader.main(Reader.java:28)
Caused by: java.nio.file.FileSystemException: c:\Temp\reader\msg.xml: The process cannot access the file because it is being used by another process.
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.implDelete(WindowsFileSystemProvider.java:269)
at sun.nio.fs.AbstractFileSystemProvider.delete(AbstractFileSystemProvider.java:103)
at java.nio.file.Files.delete(Files.java:1126)
at com.project.test.Reader.lambda$0(Reader.java:35)
... 4 more
这是我的阅读课:
package com.project.test;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.concurrent.TimeUnit;
import java.util.stream.Stream;
public class Reader {
public static void main(String[] args) {
Path path = Paths.get("c:\\Temp\\reader\\");
WatchService watchService;
try {
watchService = path.getFileSystem().newWatchService();
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
WatchKey watchKey = null;
while (true) {
watchKey = watchService.poll(5, TimeUnit.SECONDS);
if (watchKey != null) {
try(Stream<WatchEvent<?>> events = watchKey.pollEvents().stream()) {
events.forEach(event -> {
if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE) {
@SuppressWarnings("unchecked")
Path name = ((WatchEvent<Path>) event).context();
Path file = path.resolve(name);
try {
if (Files.isRegularFile(file)) {
Files.delete(file);
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
});
}
watchKey.reset();
}
}
} catch (IOException | InterruptedException e) {
throw new RuntimeException(e);
}
}
}
你不知道什么是不正确的吗?我希望应该错过文件上的一些“关闭”,但路径只是文件上的目标,不应该关闭,应该吗?感谢所有提示。
如果您阅读WatchService的javadoc,它会说该实现依赖于操作系统,即。对于某些操作系统,当文件添加到文件夹时可能会生成多个事件:
例如,当监视目录中的文件被修改时,在某些实现中可能会导致单个ENTRY_MODIFY事件,但在其他实现中可能会导致多个事件。
我的直觉是这也是你的情况。
以下是一些类似的讨论:
Java7 WatchService-忽略同一事件的多次出现
JavaNIO Watch Service在将新文件添加到Watch文件夹时创建了ENTRY_CREATE和ENTRY_MODIFY
我要做的是将我要删除的文件的路径存储在一个并发集中,并且仅当当前路径不在该集中时才尝试删除。
下面是使用Ucanaccess Jdbc驱动程序从Microsoft Access文件filename.accdb获取连接的代码。但在运行此代码时,它会抛出异常,就像已经使用的文件一样。 但是我想在其他应用程序使用MSAccess数据库文件时并发地使用它。 当我运行上面的代码时,出现了如下异常: net.ucanaccess.jdbc.ucanaccesssqlexception:UCAEXC::
我正在尝试测试我自己的antiweb版本,可以在这里找到。但是,我正在使用Pythons单元测试模块对其进行测试。代码如下: 除了功能外,所有功能都正常工作。在执行unittest时,如果不拆下,temp文件夹及其内容将被完美创建。但是使用功能,我得到一个错误: 当我再看临时文件夹时,文件夹本身仍然在那里,但现在是空的。这将是太多,包括我的反网络文件在这里,所以我有它在这里再次链接,如果你需要它。
我的代码用于查看文件夹并删除分辨率为1920x1080的图像的脚本。我遇到的问题是,当我的代码运行时; 我收到以下错误消息: 我想确认一下,Python是我电脑上唯一运行的程序。导致此问题的原因是什么?如何解决?
我的脚本搜索特定目录中的所有pdf文件,然后从pdf中提取一个id,并在文件中组织pdf。例如我有: 我想这样组织它们: 下面的脚本做的工作,但我认为只有最后一个文件输出以下错误: 回溯(最近一次调用):文件“C:\Users\user\Downloads\aa\project.py”,第74行,在操作系统中。rename(source,dest)PermissionError:[WinError
当我试图删除一个文件时,它说我的服务器正在使用它,所以我尝试使用(Image img=Image.FromFile(imgFilePath))实现一个,但随后我得到了
问题内容: 我的代码用于一个脚本,该脚本查看一个文件夹并删除分辨率为1920x1080的图像。我的问题是我的代码运行时; 我收到此错误消息: 只需确认一下,Python是我计算机上运行的唯一程序。是什么导致此问题,我该如何解决? 问题答案: 您的过程就是打开文件的过程(仍然存在)。您需要先关闭它,然后再删除它。 我不知道PIL是否支持上下文,但是是否支持: 进入之前,请确保删除(并关闭文件)。 如