- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
如果我只想对目录第一级的文件做一些事情,使用 Files.list(...)
或 Files.walkFileTree(...)
或 Files.walk(...)< 有区别吗
?
Files.walkFileTree(directory, Collections.emptySet(), 1, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
doSomething(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
// log exc
return FileVisitResult.CONTINUE;
}
});
对比
Files.list(directory)
.forEach(path -> {
try {
doSomething(path);
} catch (IOException exc) {
// log exc
}
});
对比
Files.walk(directory, 1)
.forEach(path -> {
try {
doSomething(path);
} catch (IOException exc) {
// log exc
}
});
最佳答案
使用以下代码作为测试,我掌握了问题的窍门。 walk*
之间的主要区别和 list
是那个list(dir)
给出目录中的文件流 dir
, 而两者都是 walk*
方法遍历子树其参数包括子树的根——目录本身。
walk
之间的区别和 walkFileTree
是他们为遍历树提供了不同的接口(interface):walkFileTree
需要 FileVisitor
, walk
给出 Stream<Path>
.
public class FilesTest {
public static void main(String[] args) {
final String pwd = System.getProperty("user.dir");
System.out.println("Working Directory = " + pwd);
Path dir = Paths.get(pwd);
System.out.println("Files.walk");
try {
Files.walk(dir, 1).forEach(path -> FilesTest.doSomething("walk", path));
} catch (IOException e) {
logException("walk", e);
}
System.out.println("Files.walkFileTree");
try {
Files.walkFileTree(dir, Collections.emptySet(), 1, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
doSomething("visitFile", file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
logException("visitFile", exc);
return FileVisitResult.CONTINUE;
}
});
} catch (IOException e) {
logException("walkFileTree", e);
}
System.out.println("Files.list");
try {
Files.list(dir).forEach(path -> FilesTest.doSomething("dir", path));
} catch (IOException e) {
logException("dir", e);
}
}
private static void logException(String title, IOException e) {
System.err.println(title + "\terror: " + e);
}
private static void doSomething(String title, Path file) {
System.out.println(title + "\t: " + file);
}
}
关于java - Files.list 和 Files.walkFileTree 和 Files.walk with maxdepth = 1 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37858082/
我想要一个针对 linux 中的 maxdepth 选项的标准 python 解决方案。我可以用 os.walk() 模拟 find 命令,但我想限制代码级别的深度。我不想在我的代码中使用 subpr
在我的项目中,我有一个来自 Client -> Projects 的一对多关系.因此,在我的一个观点中,我试图展示属于该客户的所有项目。所以我有一个 IEnumerable代表所有客户项目。 问题是
我们将 ASP.NET WebAPI 与 Entity Framework (延迟加载)一起使用,并在将数据返回给客户端之前使用 Json.NET 将数据序列化为 JSON。 我们正在经历内存使用量的
我正在尝试使用 ArangoDB 构建一个大型社交网络图。我在那里有数据 - 大约 35k 个顶点和大约 150k 个边。 我意识到这是一个非常多的数据,所以我希望一次只绘制一个子集 - 可能与起点相
我有一个带有 HTTP 绑定(bind)的 WCF 服务。 AppConif 文件 maxDepth="32"。这适用于除 ONE 以外的所有机器。 我的问题是当 maxDepth="32"时为什么这
我正在使用 JMS Serializer 包将 Symfony 实体序列化为 json。一切工作正常,直到我开始使用 MaxDepth 注释来避免深度递归。 我有一个名为“类别”的实体,其中有“子类别
我想打印子目录中的文件,该子目录位于根目录的 2 级内部。在 shell 中,我可以使用下面的查找命令 find -mindepth 3 -type f ./one/sub1/sub2/a.txt .
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有点困惑。我无法找出 PreserveReferences 和 MaxDepth 之间的区别。 假设我们有以下 DTO 和模型。 public class PersonEntity { pu
我有一些基于 Sphinx 的文档,用于我构建的库,我想显示除更改日志之外的所有页面的扩展目录。我通过将更改日志移到第二个 :toctree:: 来弄清楚如何做到这一点,但这有一些奇怪的行为。主要是,
MS CRM 2011 具体而言。这实际上是一个 4 个问题: 一个。为什么选择 8 作为默认限制? (它是任意的,原始深度计数器是 3 位整数(尽管执行上下文的深度是有符号的 32 位),开发人员只
MS CRM 2011 具体而言。这实际上是一个 4 个问题: 一个。为什么选择 8 作为默认限制? (它是任意的,原始深度计数器是 3 位整数(尽管执行上下文的深度是有符号的 32 位),开发人员只
希望有人能帮助解决这个问题: 我正在尝试使用此命令删除/tmp 上的 session 文件: find /tmp -name 'sess_*' -user Username -maxdepth 1 $
我只需要通过 JsonConvert.SerializeObject 序列化对象的第一层。我试过 MaxDepth = 1,但此属性仅用于反序列化。 期望的行为(属性栏缺失或为空): class Fo
我最近更新到最新的 spring mongodb 1.10 以尝试新的 $graphLookup 聚合器。但是,我似乎无法指定 graphLookup 的所有参数。 具体来说,我可以成功设置 star
我现在使用下面的 bash 脚本在每个 2 级深度目录中创建文件列表,并在每个特定文件夹中输出为文本文件。 但是,我只能将其命名为“File.txt”如何使用二级深度目录作为输出文本文件名 例如在列出
我在使用 向服务器发送消息时收到以下错误SignalR 2.0.0 : SignalR: The reader's MaxDepth of 20 has been exceeded. 我使用 Unit
我正在尝试使用 firebase teSTLab 为我的 android 应用程序自动执行“UI 测试”。我已经在 android studio 中保存了一个脚本,但想限制机器人进行任何进一步的猴子测
我有动态 CRM 8.2 本地实例,我想将 WorkflowSettings.MaxDepth 属性从最大深度 8 增加到 120。有人可以帮我确定一下,如果我将其增加到 120,会对我机器的 RAM
我有以下文件夹结构(作为一个最小的例子): dir ├── a │ ├── b │ │ ├── c.txt │ │ └── d.txt │ └── c │ └──
我是一名优秀的程序员,十分优秀!