我有一个连接到文件夹的简单类,我想删除所有创建的常规文件,但是当我读取同名文件时(同一个文件被插入文件夹不止一次或两次),我得到了错误
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);
}
}
}
你不知道哪里不对吗?我希望这应该错过文件上的一些“关闭”,但路径只是文件上的目标,不应该被关闭,应该是吗?感谢所有提示。