问题标签 [filevisitor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
io - The correct way to use FileVisitor in java
I am trying to step through an entire path and its single layer of sub directories. For each file, I need to read five data fields and output them to a delimited text file. I'm able to read from a single text file and validate my output on screen; after that I'm stuck. I cannot seem to to find the right parameters for FileVisit. Some specific questions are comments in my code posted below. And although I'm no nearly that far yes, I'd like to get some idea for writing to an output file, namely whether the place I wish to put it is the most logical one.
I've reviewed the https://stackoverflow.com/questions/9913/java-file-io-compendium and JavaDocs' info on the File Visitor
http://docs.oracle.com/javase/7/docs/api/index.html?java/nio/file/FileVisitor.html .
However, I'm still not able to get FileVisitor working properly.
@Bohemian suggested changing interface
to class
which I've done.
SSCCE below...but comments in the version above point to specific questions I'm having.
java - 移动文件时出现异常
我假设这与我对如何FileVisitor
工作和解析目录的知识有限有关。我想要做的是将目录的内容移动到另一个目录中。我通过这样实现来做到这FileVisitor<Path>
一点:
反过来,我Mover
像这样使用我的课程:
我不喜欢from
在调用时添加两次walkFileTree
,但目前我的问题主要出TODO
在我的代码中的行下(但是我非常感谢有关如何解决该问题的任何评论)。我不明白为什么会引发该异常。我猜这是因为文件已经被移动了。如果是这种情况,我该如何阻止我的代码再次尝试移动它,我现在这样做的方式或多或少是正确的?
java - 我想用 Java 7 的 FileVisitor 爬树
我已经查看并搜索了一些关于如何从路径的低点开始并向上(或“返回”)的指导,直到找到一个具有我正在搜索的名称的文件夹。FileVisitor 类看起来应该能够帮助我,但它似乎只能从头到脚工作。
有什么可以指点我的吗?
谢谢,约翰
{已编辑:我似乎对在评论中回复的两个人表示感谢。那谢谢啦!我有一个“呃!” 当我看到简单方法的那一刻。这篇文章对于开始使用 FileVisitor 的人来说看起来很有用。把它们放在一起,如果需要的话,我可以上上下下。约翰]
java - 程序在遍历目录树时在 JTextArea 中显示文件名,但我不知道如何通过按键停止它
有两个窗口:用户输入的 GUI 和找到的文件名列表的输出窗口。执行必须是用户可以通过按键停止的,并且必须让两个窗口都打开,因为程序处理子目录,因此它可以运行很长时间,可能会单步执行 100_000 个文件,产生大量输出或根本不产生输出,具体取决于用户的文件名模式匹配所选起始节点中遇到的文件。
这是我的问题:
如何查找允许用户终止的按键(例如,ESC 或 CTRL-C)?(单击红色 X 不是一个选项,因为它会关闭窗口;用户需要在终止之前查看找到的内容。这样做不会关闭任何一个窗口,因为一旦树遍历开始,所有按钮都将被禁用。)
我尝试将 keyListeners 放在几个地方,但是一旦单击“开始”按钮,所有的摆动组件都被禁用。
这似乎是一种常见的情况,我很惊讶我找不到任何直接回答问题的教科书、线程或 Google 信息。所以恐怕这不会是一件容易的事。这也就不足为奇了。我可能在这里找到了线索,但我无法编译它,并且其中包含的链接不会导致该代码片段。
单击“搜索”按钮时开始搜索:
该doIt()
方法通过以下扩展遍历目录树SimplefileVisitor
:
jTextArea1
输出通过以下方法写入report()
:
这主要通过以下visitFile()
方法完成SimpleFileVisitor
:
这是主要课程:
java - 带有 FileVisitor 类和 walkFileTree() 的 Swingworker,它在目录树中的“一组”文件上进行内部迭代;在哪里发布()?
似乎长时间运行的 tree walker 任务应该在这样的类中定义:
并开始这样的地方:
长时间运行的任务不仅由对类中的方法的一次调用发起,而且完全由其执行。所以肯定对它的调用必须在.walkFileTree()
Files
doInBackGround()
请注意,walkTreeFile()
内部会为遇到的每个文件调用四个方法。程序员编写的循环是不可行的。所以这是我的问题。如何使用publish()
将文件信息作为字符串发送到process
我需要覆盖的方法?我见过的例子有publish()
inside doInBackground()
,但是在一个循环中,这在这里是不可能的。
我最关心的四种方法之一是visitFile()
,它walkFileTree()
需要能够找到,我怀疑这是放置的地方publish()
:
我可以将 walkFileTree() 调用的所有 4 个方法放在内部类 insidedoInBackground()
中,但这似乎是一厢情愿的想法。
PS我不能用get()
;这就是重点(据我所知)——获得结果的延迟太长(可能要处理数千个文件才能找到十几个文件)才能等到 doInBackground() 结束。
===========================================
编辑#3,原始发布时间后 50 分钟
===========================================
(编辑#2,发布后 40 分钟)
这是我的处理方法。println 没有执行。
此外,包含的类语句doInBackground()
已更改:
该类Walking
嵌套在doInBackground()
.
===========================================
(编辑,发布后 20 分钟)
这编译但什么也没做:
==============================
...另一个怪异的编辑...我现在的班级定义...
... zzzzzzzzzzzzzzzzzzz ......
java - 无法在 Java 中编译 walkFileTree 方法
这是我的 Java 类:
这一行:
抛出错误:PrintFiles cannot be converted to <? super Path>
这是可以接受的,但是当我将上面的行更改为:
它仍然显示错误SimpleFileVisitor() has protected access in SimpleFileVisitor.
所以我想如何运行 walkFileTree 方法。我正在尝试从这里运行示例。我也使用上面的代码看到了关于 SO 的示例,但不知道为什么我会遇到问题。
data-structures - Java FileVisitor 按什么顺序工作
这个问题的答案是B和C。我明白为什么B是答案之一,但我不明白为什么C也是正确的。
有人可以解释为什么 C 是正确的吗?
java - 通过线程和“tree walker”搜索数千个文件,将匹配项写入 JTable 会导致无响应
我已经修改了我的 Windows 7 搜索程序,将匹配的文件写入JTable
. 在此之前,我正在写一个JTextArea
. 输出很丑;因此JTable
输出。但是JTable
,如果搜索数千个文件,程序会时不时地变得无响应。(不是这样JTextArea
。非常顺利。)
我的问题是如何提高响应能力。
我有一个Thread
被调用main
并从给定节点“遍历文件树”的节点:
这是 的类头TASK
:
这是run
:
这是树遍历的主要例程(还有其他 3 个,一个用于处理目录,一个用于后处理,一个用于错误):
匹配的文件及其信息被写入JTable
:
为了提高响应能力,我不知道是否需要另一个Thread
来写入JTable
或者是否需要使用SwingWorker
. 无论哪种情况,我都不确定如何实施。
假设另一个Thread
,我会把report
方法变成一个类implements Runnable
吗?我在可视化实现时遇到了麻烦,但如果必须的话,我可能会弄清楚。
我曾经在这个程序中使用过SwingWorker
,可能不正确(没有Thread
)。当输出区域不断闪烁时,我放弃了它。所以我不热衷于走那条路,但如果可取的话,我会弄清楚的。
我不认为这个问题属于“意见”领域。需要有关如何提高响应能力的建议。如果有人可以提前指出错误,我只是不想走错路。
java - 尝试在线程中使用 FileVisitor 的搜索程序中使用 SwingWorker
我正在修改我的Search
程序以使用SwingWorker
. 原始代码(main
如下所示)有一个Thread
被调用main
并从给定节点“遍历文件树”的代码:
这是原始的类标题TASK
:
但是为了使用SwingWorker
,(我假设)我需要TASK extends SwingWorker
,使原始run
命令非法(错误:run
在final
)SwingWorker
。
这是原文run
:
由于我不能使用run
,所以我在类的初始化上方编写了代码,TASK
如下所示:
但是现在main
下面的行会导致错误(没有合适的构造函数,因为现在 TASK 没有实现可运行的......):
如果我只是说new TASK();
GUI 显示,但是当我单击“搜索”按钮时,什么也没有发生。没有文件步行。没有错误。的输出TASK
甚至没有显示。所以没有机会调用SwingWorker
. (事实上,只是为了看看会发生什么[什么],我把它从类头中删除了TASK
: public class TASK /*extends SwingWorker*/ implements FileVisitor<Path>
。)
如果有什么明显的错误,我很乐意看到。如果没有,我会花很长时间制作一个SSCCE
.
java - 带有 FileVisitor 的 SwingWorker 不能快速发布已处理的信息;GUI 挂起
使用不快速发布处理过的信息SwingWorker
;GUI 挂起。我宁愿它没有,也想帮助解决这个问题。FileVisitor
以下是我如何使用接口在 Windows 目录节点中搜索与用户指定条件匹配的文件的简要SwingWorker
概述FileVisitor
。:
编辑如果我只包含这两行,问题可能已经立即解决
GUI
启动 的新实例SwingWorker
,其工作是显示(在 中)由它启动JTable
的实例找到的文件信息。实例化, 并开始。在方法中找到的每个匹配文件都被编辑为to 。TASK
TASK
FileVisitor
walkFileTree
visitFile
publish
SwingWorker
process
它在大多数情况下都很好用,但是如果有大量匹配的文件,GUI 会在几秒钟内变得无响应;同时,发生了大量的读取和显示,并且每读取几千个文件就更新一次 UI。
尽管SwingWorker
用于填充JTable
背景,但显然(我猜)太多匹配的文件信息来得太快而无法跟上。
这就是我这么说的原因:
即使visitFile
有一个发出信号的计数器,TERMINATE
在process
添加记录方面显然远远落后JTable
。它的println
内部表明,随着时间的推移,通过的数量会发生chunks
很大变化,具体取决于FileVisitor
找到匹配项的速度:
visitFile
终止后,process
必须发送(10001-2168)或 7833 条记录到JTable
,并且花费了很长时间,并且 GUI 大部分时间都没有响应。事实上,如果最大。匹配是(荒谬的)10,000,程序挂起很多分钟,但 10,000 条记录在JTable
.
我不知道如何处理反应迟钝。我希望能够按下停止按钮并停止程序。或者能够X
(关闭)窗口。没门。
我没有SwingWorker
正确使用吗?SwingWorker
由于没有可用的循环(它是内部的),因此我无法基于树行走。
PS 虽然显然挂起,但javaw
它占用了稳定的 25% 的 CPU 时间,并将其内存分配增加了大约 16K/秒,process
直到它最终发布最后一个块。
编辑
我可能在这里找到了帮助。
但是,天哪,接近??
我已经强调了我的问题。