首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遇到权限错误时SimpleFileVisitor会发出问题

遇到权限错误时SimpleFileVisitor会发出问题
EN

Stack Overflow用户
提问于 2016-09-08 10:16:32
回答 1查看 441关注 0票数 0

我试图在硬盘中搜索mp4文件,并将它们复制到特定的文件夹中。问题是我没有访问像:"C:\Documents and Settings"这样的文件夹的权限,所以我的程序在遇到这些文件夹时会停止,而不是继续继续。

我试图创建一个黑名单,但它根本不起作用。

代码语言:javascript
复制
package S;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;

    public class C {
        public static void main(String args[]) throws IOException {
            Path dir = Paths.get("C:/");
        Files.walkFileTree(dir, new FindJavaVisitor());
    }

    private static class FindJavaVisitor extends SimpleFileVisitor<Path> {

        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            if (file.toString().contains(".mp4")) {
                file.toFile().renameTo(new File("C:/MP4/"+file.toFile().getName()));
            }
            return FileVisitResult.CONTINUE;
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-08 10:32:08

你必须重写两种方法。

第一个是 method

如文件所述:

除非重写,否则此方法将重新引发阻止访问文件的I/O异常。

您还必须重写 method;它有两个参数,第二个参数是IOException。如果出现错误,则第二个参数将不为null,在本例中,再次从文档中获得:

除非重写,否则如果目录迭代完成而没有I/O异常,则此方法返回继续;否则,此方法将重新抛出I/O异常,该异常导致目录的迭代过早终止。

考虑到您的错误,第二个错误是您要重写的错误。

但是,我在您的代码中看到了您执行file.toFile().renameTo()的操作。

不要用这个。使用Files.move()代替。

最后,您还可以在迭代时移动..。这不是一个很好的主意。回想一下,例如,与旧API不同的是,目录中的文件列表是动态填充的!

您应该创建一个“重命名”Map<Path, Path>,并在访问完它之后执行重命名。至少在这件事上我会这么做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39388309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档