練習問題
1. ファイルを探すコマンド FileFinder
指定されたディレクトリ以下の特定の名前をもつファイルが存在するかを探索するプログラムを作成してください. 以下のように指定してください.
java FileFinder ファイル名 探索ディレクトリ
例題3が参考になるでしょう.探索には,TreeViewer
のtraverse
と同じように
再帰呼び出しを行いましょう.
ファイル名の一致を確認するには,値の一致性を確認しましょう.
見つかった場合に,全てのパスを出力し,見つからなかったら,その旨を出力するようにしましょう.
見つかったら,とりあえず,結果を入れる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.