練習問題

1. ファイルを探すコマンド FileFinder

指定されたディレクトリ以下の特定の名前をもつファイルが存在するかを探索するプログラムを作成してください. 以下のように指定してください.

java FileFinder ファイル名 探索ディレクトリ

例題3が参考になるでしょう.探索には,TreeViewertraverseと同じように 再帰呼び出しを行いましょう. ファイル名の一致を確認するには,値の一致性を確認しましょう

見つかった場合に,全てのパスを出力し,見つからなかったら,その旨を出力するようにしましょう. 見つかったら,とりあえず,結果を入れるListにパス(File型変数)を追加しましょう. そして,最後に Listの大きさを確認し,見つかったか,見つからなかったかを判断しましょう.

実行例

$ java FileFinder TreeViewer.java prog
prog/lesson07/TreeViewer.java
$ java FileFinder TreeViewer.java ../
../prog/lesson07/TreeViewer.java
../2019autumn/prog/07/TreeViewer.java
$ java FileFinder TreeViewer.notfound prog
TreeViewer.notfound: Not found.

2. ディレクトリを作成するコマンド mkdir

ディレクトリを作成するコマンド MakeDirectory を作成しましょう. 作成したいディレクトリのパスを持つFile型変数を作成し,その変数に対して,mkdir メソッドを呼び出すとディレクトリを作成できます.

実行例

$ java ListFiles ..
lesson01 lesson02 lesson03 lesson04 lesson05 lesson06 lesson07
$ java MakeDirectory ../lesson00
$ java ListFiles ..
lesson00 lesson01 lesson02 lesson03 lesson04 lesson05 lesson06 lesson07
$ java ListFiles ../lesson00
$ java MakeDirectory ../lesson00/not/exist/parent/dir
../lesson00/not/exist/parent/dir: could not make directory.

3. ディレクトリを作成するコマンド mkdir の改良

先ほどの MakeDirectory は途中のディレクトリが存在しないとき, ディレクトリの作成に失敗しました.そのような場合でもディレクトリが作成できるようにしましょう.

ディレクトリを作成するコマンド mkdirでは,mkdirメソッドを利用しました. ここでは,mkdirメソッドの代わりに,mkdirsメソッドを利用してください. これで,途中のディレクトリが存在しない場合でも作成してくれます.

クラス名を MakeDirectories としてください. なお,コマンドライン引数で複数の値を受け取れるようにしてください.

実行例

$ java MakeDirectories a/b/c/d/e/f
$ java ListFiles a
b

4. ファイル,ディレクトリを削除するコマンド remove

ファイル,ディレクトリを削除するコマンド Remover を作成してください. コマンドライン引数で受け取った複数のパスのファイルを削除するコマンドです. ディレクトリ内にファイルがあったとしても,それらも全て削除してください.

ただし,必要なファイルを削除しないように気をつけてください.

削除は,File型の変数に対して,deleteメソッドを呼び出してください. ただし,ディレクトリ内が空でなければ,deleteメソッドは失敗します. ディレクトリが空でない場合は,そのディレクトリ内部のファイル,ディレクトリを削除してから削除するようにしましょう. 再帰呼び出しを用いると実現できるでしょう.

実行例

$ java ListFiles a/b/c/d/e
f
$ java Remover a/b/c/d/e/f
$ java ListFiles a/b/c/d/e
$ java Remover a
$ java ListFiles a
ls: a: No such file or directory.