Master -
Yucchi
Since - 2012/05/05
JDK 7 build 58 NIO2 walkFileTree を試す
JDK 7 build 58 で採用されている NIO2 の機能の一部である walkFileTree を試してみます。
下記のサイトを参考にさせていただきました。
The Java Tutorials' Weblog PathMatcher in NIO.2
開発環境は
OS Windows Vista Ultimate 64bit
JDK6u13
NetBeans IDE 6.7 Build 200905101401(開発版)
です。
それでは JDK 7 build 58 を NetBeans で使用できるようにします。
[ ツール ] → [ Java プラットフォーム ] をクリックします。
[ Java プラットフォームマネージャー ] ウィンドウが表示されますので左下の [ プラットフォームを追加 ... ] ボタンを押します。
JDK 7 build 58 のインストールディレクトリを指定して [ 次へ > ] ボタンを押します。
Javadoc を置いてある場所を指定します。
[ プラットフォーム名 ] を解りやすく変更できます。
各項目を設定したら [ 完了 ] ボタンを押します。
JDK 7 build 58 が追加されて使用可能となります。
[ 新規プロジェクト アイコン ] をクリックして新規プロジェクトを作ります。
[ Java ] → [ Java アプリケーション ] と選択し、[ 次へ > ] ボタンを押します。
下記のように設定します。
[ 完了 ] ボタンを押すとプロジェクトが自動生成されます。
自動生成されたプロジェクトのプロパティを設定します。
[ ファイル ] → [ プロジェクトのプロパティ ] を選択します。
プロジェクトのプロパティを設定します。
[ Java プラットフォーム ] に先ほど登録した JDK 7 build 58 をドロップダウンリストから選択します。
[ ソース ] カテゴリの下のほうにある [ ソース / バイナリ形式 ] のドロップダウンリストから JDK 7 を選択し、[ 了解 ] ボタンを押します。
それでは自動生成されたコードを下記のように編集します。
左にランプと赤い印が表示されてます。
エラーとヒントの表示なのでそれをクリックしてみます。
エラーの詳細と対策案が表示されるので必要なものをクリックします。
java.nio.file.FileVisitor インターフェイスがインポートされました。
今度は「すべての抽象メソッドを実装」をクリックします。
無事に FileVisitor インターフェイスの抽象メソッドをすべて実装しました。
同様にエラーを修正していきます。
エディタ画面を右クリックしてコンテキストメニューより「インポートを修正」でもインポート関係のエラーは可能です。
とりあえず無事にインポートが完了しエラーはなくなりました。
それでは FileVisitor インターフェイスに実装されている下記の五つの抽象メソッドをオーバーライドします。
リターン文でエラーが出ていますね。
ヒントも解決につながるものはないようです。
Javadoc を参照してみます。
なにやらリターン文が違いますね。
return FileVisitResult.CONTINUE;
となってます。
リターン文を Javadoc のサンプルのように変更すれば OK でした。
ってことは・・・
インポート文を
import static java.nio.file.FileVisitResult.*;
のようにスタティックインポートを利用してもいいようです。って・・参考にしたサイトはそうなってました。(^^;
さて、エラーもなくなったことだしプロジェクトを構築してみましょう。
無事に構築できたけど下記のように注意が出てますね。
[ ツール ] → [ オプション ] でエディタのオプションを変更します。
下図のように [ Javac の標準的な警告 ] のチェックを入れます。
75 行目にヒントが表示され「警告の抑制 - unchecked」が出ますのでそれをクリックします。
@SuppressWarnings("unchecked") アノテーションが追加されます。
これで先ほどの注意は出なくなります。
それではプログラムのテスト用に下図のようなディレクトリ構造を持つドライブを準備しました。
[ プロジェクトのプロパティ ] の [ 実行 ] カテゴリを選択し、[ 引数 ] を下図のように設定します。
今回は第二引数はとりあえずなんでもかまいません。
プログラムを実行するとちゃんとディレクトリを渡り歩いている様子がわかりますね。
またパーミッションによりアクセスできなかったディレクトリもしっかり捕まえてます。
それでは PathMatcher を使ってみましょう。
エラーを修正します。
検索用のメソッドを追加します。
Path Matcher を利用した検索メソッドを定義します。
ここで、file.getName() メソッドが D ドライブだと null になるので苦肉の策で下記コードのようにおまじないを入れてます。
今度は NetBeans でお馴染みのディレクトリ構成を使用します。
ディレクトリ内のファイルは想像がつきますよね。
解らないって人は NetBeans を使ってみましょう!(ヲヒ
ちなみにプロジェクトの実行プロパティはさっきと同じで
第一引数に D ドライブを指定してます。
第二引数では java ファイルと class ファイルを指定してます。
それでは実行してみましょう。
解りにくいけどちゃんと実行されてます。
解りやすくするために下記コードの一部をコメントアウトして PathMatcher でヒットするものだけ表示させてみます。
最初と最後の FILE PATH : D:\ ROOT は検索エラー表示なので無視してください。
つまりちゃんと java ファイルと class ファイルは検索できてます。(^^)
JDK 7 の NIO2 の一部の機能 walkFileTree を軽く試してみましたけど面白そうですね。
また、Path Matcher も便利そうです。
こういった次期JDKを気楽に試せる NetBeans も最高です!