問題タブ [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 - JavaでFileVisitorを使用する正しい方法
パス全体とそのサブディレクトリの単一レイヤーをステップスルーしようとしています。ファイルごとに、5つのデータフィールドを読み取り、区切られたテキストファイルに出力する必要があります。単一のテキストファイルから読み取り、画面上の出力を検証することができます。その後、私は立ち往生しています。FileVisitの適切なパラメータが見つからないようです。いくつかの具体的な質問は、以下に投稿された私のコードのコメントです。そして、私はそれほど遠くはありませんが、出力ファイルに書き込むためのアイデア、つまり、配置したい場所が最も論理的な場所であるかどうかを知りたいと思います。
https://stackoverflow.com/questions/9913/java-file-io-compendiumおよびファイルビジター
http://docs.oracle.com/javase/7/docs/api/に関するJavaDocsの情報を確認しました。 index.html?java / nio / file/FileVisitor.html。ただし、FileVisitorを正しく機能させることはできません。
@Bohemianは、私が行ったことに変更interface
することを提案しました。class
以下のSSCCE...しかし、上記のバージョンのコメントは、私が持っている特定の質問を示しています。
java - ファイル移動時の例外
FileVisitor
これは、 がどのように機能し、ディレクトリを解析するかについての私の知識が限られていることに関係していると思います。私がやろうとしているのは、ディレクトリの内容を別のディレクトリに移動することです。私はこのFileVisitor<Path>
ように実装することでこれを行っています:
次に、クラスMover
を次のように使用します。
from
を呼び出すときに2回追加するのは好きではありませんwalkFileTree
が、現在、私の問題は主にTODO
コード内の の下の行にあります(ただし、それを解決する方法についてのコメントをいただければ幸いです)。その例外が発生する理由がわかりません。ファイルが既に移動されているためだと思います。その場合、コードが再び移動しようとするのを止めるにはどうすればよいですか?現在行っている方法は多かれ少なかれ正しいですか?
java - Java 7 の FileVisitor を使用してツリーを上っていきたい
検索している名前のフォルダーが見つかるまで、パスの低いポイントから開始して上に移動する (または「戻る」) 方法について、いくつかのガイダンスを探して検索しました。FileVisitor クラスは私を助けることができるように見えますが、頭からつま先までしか機能しないようです。
誰かが私に指摘できるものはありますか?
ありがとう、ジョン
{編集済み: コメントで返信してくれた 2 人にお礼を言うのは気が進まないようです。ほんとありがと!私は「当たり前!」を持っていました シンプルなアプローチを見た瞬間。そして、この記事は、FileVisitor を使い始めた人にとって役に立ちそうです。それらを一緒にすると、必要に応じて上下に移動できます。ジョン]
java - Java で walkFileTree メソッドをコンパイルできません
これは私のJavaクラスです:
この行:
エラーをスローします:PrintFiles cannot be converted to <? super Path>
これは許容できますが、上記の行を次のように変更すると:
それはまだエラーを示しています。SimpleFileVisitor() has protected access in SimpleFileVisitor.
だからどうやって walkFileTree メソッドを実行すると思いますか。
data-structures - Java FileVisitor が動作する順序
この問題の答えは B と C です。なぜ B が答えの 1 つなのかはわかりますが、なぜ C も正しいのかわかりません。
誰かがCが正しい理由を説明できますか?
java - スレッドと「ツリー ウォーカー」を介して何千ものファイルを検索し、JTable に一致を書き込むと応答しなくなる
Windows 7 の検索プログラムを修正して、一致したファイルをJTable
. これの前に、私はに書いていましたJTextArea
。出力は醜いものでした。したがって、JTable
出力します。しかし、JTable
何千ものファイルを検索すると、プログラムが応答しなくなることがあります。(そうではありませんJTextArea
。非常に滑らかです。)
私の質問は、応答性を改善する方法です。
Thread
特定のノードから呼び出されmain
、「ファイルツリーをたどる」ものがあります。
のクラス ヘッダーは次のTASK
とおりです。
ここにありrun
ます:
ツリー ウォーキングのメイン ルーチンは次のとおりです (他に 3 つのルーチンがあり、1 つはディレクトリの処理用、1 つはディレクトリの後処理用、もう 1 つはエラー用です)。
一致したファイルとその情報は次のファイルに書き込まれますJTable
:
Thread
応答性を向上させるために、への書き込みに別のものが必要なのか、JTable
それとも を使用する必要があるのかわかりませんSwingWorker
。いずれにせよ、実装方法がわかりません。
Thread
別のことを仮定すると、report
メソッドをクラスに変換しimplements Runnable
ますか? 実装を視覚化するのに問題がありますが、必要に応じて理解できるでしょう。
私はかつてこのプログラムで をSwingWorker
、おそらく間違って ( なしで) 使用していました。Thread
出力エリアがひっきりなしに点滅したので諦めました。だから私はその道を行くことに熱心ではありませんが、もしお勧めであれば考えてみます。
質問が「意見」の領域に該当するとは思いません。応答性を改善する方法についてアドバイスが必要です。誰かが事前にエラーを指摘できるのであれば、間違った道を進みたくないだけです。
java - スレッドで FileVisitor を使用する検索プログラムで SwingWorker を使用しようとしています
これは、2015 年 8 月 16 日のこのスレッドの続きです
Search
を使用するようにプログラムを変更していますSwingWorker
。元のコード (main
以下に示す) にThread
は、呼び出されmain
、特定のノードから「ファイル ツリーをたどる」コードがあります。
の元のクラス ヘッダーは次のTASK
とおりです。
しかし、を使用するにはSwingWorker
、(私は推測します)TASK extends SwingWorker
元のrun
コマンドを違法にする必要があります (エラー: run
is final
in SwingWorker
)。
これがオリジナルrun
です:
を使用できないためrun
、クラスの初期化の上のコードを次のように作成しましたTASK
。
しかし、現在、main
以下の行でエラーが発生しています (現在、TASK は runnable を実装していないため、適切なコンストラクターはありません....):
そして、GUI が表示されたと言ってもnew TASK();
、[検索] ボタンをクリックしても何も起こりません。ファイル ウォークはありません。エラーなし。からの出力TASK
も表示されません。したがって、呼び出す機会はありませんSwingWorker
。(実際、何が起こるかを確認するために [何も] TASK
:のクラス ヘッダーから削除しましたpublic class TASK /*extends SwingWorker*/ implements FileVisitor<Path>
。)
明らかな間違いがある場合は、それを確認したいと思います。そうでない場合は、長い時間をかけてSSCCE
.
java - FileVisitor を使用する SwingWorker が、処理された情報を迅速に公開しない。GUI がハングする
処理された情報を迅速に公開せずに使用SwingWorker
する。GUI がハングします。私はそれがなかったことを望み、その問題の助けを求めています.FileVisitor
SwingWorker
インターフェイスを使用してFileVisitor
、ユーザー指定の条件に一致するファイルを Windows ディレクトリ ノードで検索する方法の概要を次に示します。:
編集この 2 行だけを含めていれば、問題はすぐに解決された可能性があります
GUI
の新しいインスタンスを開始しますSwingWorker
。そのジョブは、開始JTable
した のインスタンスによって見つかったファイル情報を ( に)表示TASK
することです。TASK
をインスタンス化FileVisitor
し、walkFileTree
開始します。visitFile
メソッドで見つかったすべての一致するファイルは、 to に対して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
.
無反応でどうしたらいいのかわからない。STOP ボタンを押してプログラムを停止できるようにしたいです。X
または、ウィンドウを (閉じる)ことができます。とんでもない。
私はSwingWorker
正しく使用していませんか?SwingWorker
私が利用できるループがないため、ツリーウォークをベースにすることはできません(内部的なものです)。
PS明らかにハングしている間、最終的に最後のチャンクを発行するまでjavaw
、CPU時間の25%を確実に使用し、メモリ割り当てを毎秒約16Kずつ増やしています。process
編集
私はここで助けを見つけたかもしれません。
しかし、ねえ、閉じますか??
私は私の質問を強調しました。