- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个文件,并在此之前将其删除(如果存在)。我的问题是,每当我成功进行删除操作并立即尝试创建相同的文件夹时,它都会因 AccessDenied 而失败。方法描述(对于 deleteIfExists 和 createDirectory)没有提到这种行为,所以我想我做错了什么。
这是代码:
package nio2;
import java.io.*;
import java.nio.file.*;
public class Test{
public static void main(String[] args)
{
Path existing = Paths.get("nio2//alpha//inner.txt"); // already existing
Path cpytarget = Paths.get("nio2//alphacpy//inner.txt"); // file to be created
Path target = Paths.get("nio2//alphacpy");//
try{
if(Files.exists(cpytarget))
{
Files.list(target).forEach(Test::WrappedDeleteIfExists); // deleting files inside folder
System.out.println("Deleting the directory if it exists - alphaCpy\t" + Files.deleteIfExists(target));//deleting
}
else
System.out.println("It does not exist, no need to delete anything");
System.out.println("Creating alphaCpy\t" + Files.createDirectory(target));//creating
System.out.println("copying inner.txt to the new directory\t" + Files.copy(existing,cpytarget));
}catch(IOException e)
{
e.printStackTrace();
}
}
public static void WrappedDeleteIfExists(Path in)
{
try{
System.out.println("Deleting files inside the folder\t" + Files.deleteIfExists(in));
}catch (IOException e)
{
e.printStackTrace();
}
}
}
It does not exist, no need to delete anything
Creating alphaCpy nio2\alphacpy
copying inner.txt to the new directory nio2\alphacpy\inner.txt
Deleting files inside the folder true
Deleting the directory if it exists - alphaCpy true
java.nio.file.AccessDeniedException: nio2\alphacpy
at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:83)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:102)
at sun.nio.fs.WindowsFileSystemProvider.createDirectory(WindowsFileSystemProvider.java:504)
at java.nio.file.Files.createDirectory(Files.java:674)
at nio2.Test.main(Test.java:19)
public static void main(String[] args) throws InterruptedException
{
Path existing = Paths.get("E:/work/Java/Tests/alpha/inner.txt"); // already existing
Path cpytarget = Paths.get("E:/work/Java/Tests/alphacpy/inner.txt"); // file to be created
Path target = Paths.get("E:/work/Java/Tests/alphacpy");//
File fileTarget = new File("E:/work/Java/Tests/alphacpy");
try{
if(Files.exists(cpytarget))
{
WrappedDeleteIfExists(fileTarget.listFiles()); // CHANGED , no longer using Stream<Path> pipeline to go through the file list
// deleting files inside folder
System.out.println("Deleting the directory if it exists - alphaCpy\t" + Files.deleteIfExists(target));//deleting
}
else
System.out.println("It does not exist, no need to delete anything");
System.out.println(Files.exists(target));
System.out.println("Creating alphaCpy\t" + Files.createDirectory(target));//creating
System.out.println("copying inner.txt to the new directory\t" + Files.copy(existing,cpytarget));
}catch(IOException e)
{
e.printStackTrace();
}
}
// CHANGED - using File[] instead of Path
public static void WrappedDeleteIfExists(File[] in)
{
for(int i =0;i<in.length;i++)
{
System.out.println("Deleting files inside the folder\t" +in[i].delete());
}
}
最佳答案
我注意到使用 Files.list(dir) 后跟 Files.deleteIfExists(path) 的程序存在类似问题。在 VM 退出之前,所有已删除的文件夹都不会从 Windows 资源管理器 View 中消失,如果在 VM 退出之前在 Windows 资源管理器中单击,则会显示拒绝访问。
我的程序是通过在使用后关闭每个 Files.list() 流来修复的,最好使用 try(resource) ... 最后。然后 Windows 资源管理器立即与每次删除同步,而不是等到 VM 退出
try(Stream<Path> str = Files.list(target))
{
// do your str.forEach() calls with Files.deleteIfExists
}
finally
{
}
关于java - 尝试在成功 deleteIfExists 后立即创建目录引发 AccessDenied 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39628328/
在大文件上(此处35GB): Files.deleteIfExists(Path.get("large.csv")); 使用java删除需要>60秒。稍等片刻,在控制台上使用 rm large.csv
听起来像是一个愚蠢的问题,但是对于 .Net System.IO.FileInfo.Exists,该类在实例化时会检查其是否存在,因此如果另一个进程在我的时间间隔内的同一位置创建了一个同名的文件在实例
我正在尝试创建一个文件,并在此之前将其删除(如果存在)。我的问题是,每当我成功进行删除操作并立即尝试创建相同的文件夹时,它都会因 AccessDenied 而失败。方法描述(对于 deleteIfEx
本文整理了Java中me.hao0.antares.common.zk.ZkClient.deleteIfExists()方法的一些代码示例,展示了ZkClient.deleteIfExists()的
我知道如果 blob 存在,CloudBlockBlob.DeleteIfExists() 将返回 true,如果不存在,则返回 false。 但是,我很好奇,如果 blob 确实存在,但 Azure
我得到这样的代码: paths.forEach(folderPath -> { Path to = folderPath.getRoot().resolve(folderPath.ge
我使用 BlobTrigger 模板创建了一个带有 Blob 触发器的新 C# Azure 函数。然后,我更改了绑定(bind)到 CloudBlockBlob 的 Blob 触发器的类型。接下来我尝
我是一名优秀的程序员,十分优秀!