使用javanio删除文件
我已经编写了代码,可以从本地文件系统中删除文件。但是它失败了,因为其他线程正在访问该文件使用javanio删除文件,java,Java,我已经编写了代码,可以从本地文件系统中删除文件。但是它失败了,因为其他线程正在访问该文件 Exception : the process cannot access the file because it is being used by another process. while deleting file java 以下代码: private class DeleteFileRecursively extends SimpleFileVisitor<Path> {
Exception : the process cannot access the file because it is being used by another process. while deleting file java
以下代码:
private class DeleteFileRecursively extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
if (file.toString().equals(
SECURE_PATH + File.separator + MMKEYSTORE)
|| file.toString().equals(
SECURE_PATH + File.separator + MMTRUSTSTORE)) {
Files.delete(file);
} else {
return FileVisitResult.SKIP_SIBLINGS;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
if (file.toString().equals(
SECURE_PATH + File.separator + MMKEYSTORE)
|| file.toString().equals(
SECURE_PATH + File.separator + MMTRUSTSTORE)) {
Files.delete(file);
} else {
return FileVisitResult.SKIP_SIBLINGS;
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path file, IOException exc)
throws IOException {
if (exc == null) {
if (file.toString().equals(
SECURE_PATH + File.separator + MMKEYSTORE)
|| file.toString().equals(
SECURE_PATH + File.separator + MMTRUSTSTORE)) {
Files.delete(file);
} else {
return FileVisitResult.SKIP_SIBLINGS;
}
return FileVisitResult.CONTINUE;
} else {
// directory iteration failed; propagate exception
throw exc;
}
}
私有类deleteFileRecursive扩展SimpleFileVisitor{
@凌驾
公共文件VisitResult visitFile(路径文件,基本文件属性属性属性)
抛出IOException{
如果(file.toString().equals(
安全_PATH+File.separator+MMKEYSTORE)
||file.toString().equals(
安全(路径+File.separator+MMTRUSTSTORE)){
文件。删除(文件);
}否则{
返回文件visitResult.SKIP_;
}
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult visitFileFailed(路径文件,IOException exc)
抛出IOException{
如果(file.toString().equals(
安全_PATH+File.separator+MMKEYSTORE)
||file.toString().equals(
安全(路径+File.separator+MMTRUSTSTORE)){
文件。删除(文件);
}否则{
返回文件visitResult.SKIP_;
}
返回FileVisitResult.CONTINUE;
}
@凌驾
公共文件VisitResult postVisitDirectory(路径文件,IOException exc)
抛出IOException{
如果(exc==null){
如果(file.toString().equals(
安全_PATH+File.separator+MMKEYSTORE)
||file.toString().equals(
安全(路径+File.separator+MMTRUSTSTORE)){
文件。删除(文件);
}否则{
返回文件visitResult.SKIP_;
}
返回FileVisitResult.CONTINUE;
}否则{
//目录迭代失败;传播异常
抛出exc;
}
}
如果你知道我遗漏了什么,我想强制删除文件。如果你运行的是Windows,那就不容易了 操作系统只是禁止您删除打开的文件。 你唯一能做的就是确保自己没有打开文件
如果您想在完成后删除它,您可以尝试在我的应用程序中实际使用它的证书,所以基本上我需要关闭应用程序然后删除它。在应用程序启动时无法删除它。我尝试了所有可能的方法。