goo blog サービス終了のお知らせ 

ぼらの「いつまでもグダグダと。」

いろんなことをグダグダと書いてます。

はじめてのソフトウェア(13) ~ファイル一覧取得(後編)

2005-11-15 09:46:22 | はじめてのソフトウェア
後編です。
前編はこちら。
-----------------------------------------------------------------------------
さっきのlistメソッドも気になるので向学のためにやってみる。
一覧を取得して削除のところを変える。

<CODE>
                // ファイルの一覧を取得して削除する
                String[] fileNames = ff.list();
                for (int i=0; i<fileNames.length; i++) {

削除対象:C:deltest
失敗です
aaa.txtは削除失敗です
bbb.txtは削除失敗です
やっぱり失敗です


なぜだかうまくいかない。
listFilesでできたので、見なかったことにしよう。


次はC:deltestcccddd.txtを削除できるようにしてみるとしよう。
同じようなことを繰り返してやれば良さそうだ。
-----------------------------------------------------------------------------
自力でここまで来ればたいしたもんです。
言いたいことはいろいろありますが、もうちょっと様子を見たいところです。

ちなみにlistメソッドで失敗した理由は、fileNamesの内容を見ると分かります。
<CODE>
                    System.out.print(ff2.getName() + "は");
</CODE>


<CODE>
                    System.out.print(fileNames[i] + "は");
</CODE>

に変えて実行してみると、

削除対象:C:deltest
失敗です
aaa.txtは削除失敗です
bbb.txtは削除失敗です
やっぱり失敗です


と出力されます。
一番最初のファイルオブジェクト(ff)は"C:deltest"で生成していたのに、
次のオブジェクト(ff2)は"aaa.txt"で生成しているわけです。
前回、"C:deltestaaa.txt"で生成したときはちゃんと削除できましたよね。
つまり、"aaa.txt"と言われても、どこのaaa.txtなのか分からないので
削除できなかったのです。

ff2を生成するときに、
<CODE>
                    File ff2 = new File(ff.getPath() + File.separator + fileNames[i]);
</CODE>

としてやれば、削除できるようになります。

はじめてのソフトウェア(12) ~ファイル一覧取得(前編)

2005-11-14 09:40:25 | はじめてのソフトウェア
さてさて、ファイル削除編の続きです。
前回はこんな感じ
-----------------------------------------------------------------------------
「ディレクトリの中のファイルを消してからディレクトリを削除する」
と言われてもよく分からんぞ。

まず一番簡単なのは、設定ファイルに消したいファイルとディレクトリを全部書いて、
順番に消していくやり方。
でも、消したいファイルの一覧なんて作ってられん。
自分でも把握できてないのに。

とりあえず言われたとおり、単純なディレクトリを消せるようにしてみる。

Java 2 プラットフォーム API 仕様 のFileクラスをもう一度見てみることにする。

deleteメソッドは削除できたらtrue、失敗したらfalseを返す。

ということは、
ディレクトリを削除してみてtrueならOK、falseならファイルを探して削除すれば良いのか?

下のほうを見ると、listメソッドというのがある。

この抽象パス名が示すディレクトリにあるファイルおよびディレクトリを示す文字列の配列を返します。
だそうだ。
よく分からんが、listっていうんだから、ファイルの一覧を作ってくれそうだ。

もうちょっと下を見ると、listFilesメソッドというのもある。
この抽象パス名が示すディレクトリ内のファイルを示す抽象パス名の配列を返します。
・・・

何が違うんだ?

listは文字列の配列を返すということは、配列の数だけファイルを作って削除すれば
消えるのかな?

listFilesはFileオブジェクトの配列を返すので、deleteを何回もやってやればよさそうだ。
いちいちファイルを作らなくてもいいし。

<CODE>
import java.io.*;

public class test5 {

    public static void main(String[] args) {
        try {
            //設定ファイルを読み込む
            FileInputStream fis = new FileInputStream("test5.txt");
            InputStreamReader ir = new InputStreamReader(fis , "MS932");
            BufferedReader br = new BufferedReader(ir);

            // 日付処理の部分は省略
            
            String delFile = br.readLine();
            System.out.println("削除対象:" + delFile);

            //ディレクトリを削除してみる
            File ff = new File(delFile);
            boolean kekka = ff.delete();
            if (kekka == true) {
                System.out.println("成功です");
            } else {
                System.out.println("失敗です");
                
                // ファイルの一覧を取得して削除する
                File[] files = ff.listFiles();
                for (int i=0;i<files.length;i++) {



C:deltestフォルダを作って、ファイルを2つ入れて実行してみると

削除対象:C:deltest
失敗です
aaa.txtは削除成功です
bbb.txtは削除成功です
今度こそ成功です


おおっ! 今度はうまくいった。
-----------------------------------------------------------------------------
ヤンコのメールはもう少し続きます。
毎回長くて申し訳ない。

はじめてのソフトウェア(11) ~ファイルを削除する 番外編

2005-11-10 14:50:51 | はじめてのソフトウェア
今回はちょっと番外編です。
前回の様子はコチラです。

--------------------------------------------------------------------------------
「ディレクトリの中のファイルを消してからディレクトリを削除する」
と言われてもよく分からんので、調べている。
しばし待て。

ところで、ディレクトリの削除で検索していたら、システムコマンドで削除する
とか書いてあったのだが、そういうのはイカンのか?
どうやるのかは分からんが。
というか、システムコマンドって何?

--------------------------------------------------------------------------------
がんばっとるようですな。
簡単なフォルダ構成から順番に考えてみてください。



システムコマンドで削除するのも可能です。
システムコマンドというのはシステムに命令するものです。
なんのこっちゃ?

Windowsだと、コマンドプロンプト(プログラム-アクセサリーコマンドプロンプトで立ち上がります)
から入力することができます。
昔はDOSコマンドなんて言ってましたが、今はDOSが関係ないのでこんな名前です。

このコマンドを使えば、エクスプローラなんぞ使わずにフォルダを作ったり消したりできます。
ちなみに削除するコマンドは
>rmdir ファイル名
です。

そしてJavaからこのシステムコマンドを実行することができます。
こういうJavaとは関係ないコマンドを実行させるためのクラスとして、
java.lang.Runtimeというクラスが用意されています。

Runtime.exec("notepad.exe");
なんて書くと、JAVAでメモ帳を開いたりできます。

同じように
Runtime.exec("rmdir ファイル名");
とやりたいところですが、Windowsではできない(やり方をしらない)ので、
rmdirコマンドを実行してくれるバッチファイルを作ります。
xxx.batとかxxx.exeとかいう名前で作ります。

そして、このバッチファイルをJavaから実行してやれば、ディレクトリの削除が可能です。
でも、Javaの立場としてはバッチファイルを実行するだけですので、
成功しようが失敗しようが知ったこっちゃありません。
しかも「システム」コマンド、というくらいですから、強力です。
強力魔法なので危険なのです。

ま、今回は死んだ後を想定しているので、危険でもかまわんのですけどね。
Java編が終わったらやってみましょうか。
Javaでシコシコ作るよりは簡単でしょうな。


はじめてのソフトウェア(10) ~ファイルを削除する File#delete()

2005-11-09 15:07:53 | はじめてのソフトウェア
さてさて絶好調のヤンコ君
調子はどうでしょうか。
前回はコチラ
------------------------------------------------------------
誰がおっさんじゃコラッ。

そんなことはどうでもよい。
今の俺は止められないぜ。

まずは処理の流れから。

1.設定ファイルから、削除したいフォルダを読み込む
2.読み込んだフォルダを削除する

設定ファイルの読み込みは一回やったので分かっている。
Fileクラスのdeleteメソッドで削除できることも調べた。

ということでプログラムを書いてみる。
コメントもつけた。

import java.io.*;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

public class test4 {

    public static void main(String[] args) {
        try {
            //設定ファイルを読み込む
            FileInputStream fis = new FileInputStream("test4.txt");
            //InputStreamReaderをnewする
            InputStreamReader ir = new InputStreamReader(fis , "MS932");
            //BufferedReaderをnewする
            BufferedReader br = new BufferedReader(ir);
            //1行目を読み込む
            String strDate = br.readLine();
            //読み込んだ設定日を出力する
            System.out.println("設定日(文字列):" + strDate);
            //読み込んだ設定日が文字列なので、Dateに変換するためにDateFormatクラスを作る
            DateFormat df = DateFormat.getDateInstance();
            //読み込んだ設定日を文字列からDateクラスに変換する
            Date dt = df.parse(strDate);
            //確認のために、Dateクラスにした設定日を出力する。
            System.out.println("設定日:" + dt.toString());
            //システム日付を取得する
            Date sysDt = new Date(System.currentTimeMillis());
            //確認のために、システム日付を出力する。
            System.out.println("当日:" + sysDt.toString());

            //設定日>システム日付だったら
            if (dt.after(sysDt)) {
                //当日以降を出力する
                System.out.println("当日以降");
                //処理を終了する
                return;
            //設定日≦システム日付だったら
            } else {
                //当日以前を出力する
                System.out.println("当日以前");
            }

            //次の行を読み込む
            String delFile = br.readLine();
            //確認のために削除するフォルダを表示する
            System.out.println("削除対象:" + delFile);
            //削除するファイルクラスを作る
            File ff = new File(delFile);
            //削除する
            boolean kekka = ff.delete();
            //確認のために結果を表示する
            System.out.print(kekka);
        // Exceptionの場合
        } catch (FileNotFoundException e) {
            // Exceptionの内容を表示する
            e.printStackTrace();
        // Exceptionの場合
        } catch (UnsupportedEncodingException e) {
            // Exceptionの内容を表示する
            e.printStackTrace();
        // Exceptionの場合
        } catch (IOException e) {
            // Exceptionの内容を表示する
            e.printStackTrace();
        // Exceptionの場合
        } catch (ParseException e) {
            // Exceptionの内容を表示する
            e.printStackTrace();
        }
    }
}



実行結果は

設定日(文字列):2005/11/01
設定日:Tue Nov 01 00:00:00 JST 2005
当日:Wed Nov 02 18:04:50 JST 2005
当日以前
削除対象:C:deltest
false


あれ?フォルダが消えてない。

ちなみに、削除対象にファイルを指定すると

設定日(文字列):2005/11/01
設定日:Tue Nov 01 00:00:00 JST 2005
当日:Wed Nov 02 18:06:22 JST 2005
当日以前
削除対象:C:deltestaaa.txt
true


ちゃんと消えてる。
なぜ?
------------------------------------------------------------
なんだかすっかりマジメですね。
ちょっとツマラン。(失礼)

コメントも入れてくれました。
ただ、コメントはここまで1行ごとに書く必要はありません。
最初のFileInputStreamからbr.readLine()までひっくるめて
//設定ファイルから設定日を取得する
くらいのレベルでよいと思います。
たまに、1行ずつ全部コメント書けとかいうところもありますけどね。
あと、確認用の処理(System.out.println)にはコメントなくていいです。
所詮確認用ですし。

で、「なぜ?」についてですが、Fileクラスのdeleteメソッドは、
空のディレクトリでないと削除できません。
ですから、ディレクトリの中のファイルを消してからディレクトリを削除する、
という動きが必要になります。


はじめてのソフトウェア(9) ~日付処理 完結編

2005-11-08 12:39:28 | はじめてのソフトウェア
おっさんにしてはすばらしい成長振りをみせるヤンコ。
続きはどうなったんでしょうか。
前回はコチラ
--------------------------------------------------------------------
設定日のDateクラスを作る方法を調べることにする。
JavaのドキュメントのDateクラスを見てみると、文字列から変換するメソッド
として
static long parse(String s)
というのがある。longって何だ?
さらに続きがある。

推奨されていません。 JDK バージョン 1.1 以降は、DateFormat.parse(String s) に置き換えられました。

推奨されていないらしい。
導かれるままにDateFormatクラスというのを見てみる。

Date parse(String source)

俺の直感がこう叫ぶ。「まさに俺が捜し求めていたのはこれだ!」
なんだかわからんが、longなんてのもなくなったし良さそうだ。

上のほうを見るとサンプルが書いてある。
DateFormat df = DateFormat.getDateInstance();
myDate = df.parse(myString);

これだ。

というわけで、日付の判定を盛り込んでみた。

public class test3 {
    public static void main(String[] args) {
        Date dt = null;
        try {
            FileInputStream fis;
            fis = new FileInputStream("hello.txt");
            InputStreamReader ir = new InputStreamReader(fis , "MS932");
            BufferedReader br = new BufferedReader(ir);
            String strDate = br.readLine();
            System.out.println("設定日(文字列):" + strDate);
            DateFormat df = DateFormat.getDateInstance();
            dt = df.parse(strDate);
            System.out.println("設定日:" + dt.toString());
            
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        Date sysDt = new Date(System.currentTimeMillis());
        System.out.println("当日:" + sysDt.toString());

        if (dt.after(sysDt)) {
            System.out.println("当日以降");
        } else if (dt.before(sysDt)) {
            System.out.println("当日以前");
        } else {
            System.out.println("同じ");
        }
    }

}

実行結果は

設定日(文字列):2005/11/03
設定日:Thu Nov 03 00:00:00 JST 2005
当日:Wed Nov 02 16:33:14 JST 2005
当日以降


日付を変えると

設定日(文字列):2005/11/02
設定日:Wed Nov 02 00:00:00 JST 2005
当日:Wed Nov 02 16:36:10 JST 2005
当日以前


完璧だと思わんかね、ワトソン君
--------------------------------------------------------------------
誰がワトソンじゃ。

それはさておき。
なんだか調べ方も板についてきて、ほとんど自力でできそうですね。
longうんちゃらはご愛嬌ということで。

次はいよいよディレクトリの削除です。
今回のソースの当日以前のところに、ディレクトリを削除する処理を書いていくことになります。
処理の流れは覚えてますね?
それと、そろそろソースが長くなってきたのでコメントを書きましょう。
できればクラスの分割もしたいところですが、それはおいおいということで。
では、次回をお楽しみに。

はじめてのソフトウェア(8) ~日付を判定する

2005-11-02 16:14:42 | はじめてのソフトウェア
はじめてのソフトウェア(9) ~日付処理 完結編

ヤンコも私も忙しかったので、間があいてしまいました。
日付の判定はどうなったんでしょうか。
--------------------------------------------------------------------
日付の判定部分をequalsに変えてみた。

public class test2 {
    public static void main(String[] args) {
        String msg = null;
        try {
            FileInputStream fis;
            fis = new FileInputStream("hello.txt");
            InputStreamReader ir = new InputStreamReader(fis , "MS932");
            BufferedReader br = new BufferedReader(ir);
            msg = br.readLine();
            // 表示
            System.out.println("設定日:" + msg);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        Date dt = new Date(System.currentTimeMillis());
        String buff = new String(DateFormat.getDateInstance().format(dt) );
        System.out.println("当日:" + buff);
        
        if (msg.equals(buff)) {
            System.out.println("同じ");
        } else {
            System.out.println("違う");
        }

    }
}

実行結果は
設定日:2005/11/02
当日:2005/11/02
同じ

バッチリ。
でも、当日以降かどうかの判定はできないってことね。文字列だから。

やはり日付の判定なのだから、日付として比較したほうがよさそうだ。
私とて、てをこまねいてみていたわけではない。
Dateクラスにafter()とかbefore()というメソッドがあることを突き止めたのだ。
当日はDateクラスで作っているのだから、同じように設定日もDateクラスにすればよいのだ。
というところで次回に続く。

--------------------------------------------------------------------
すごい成長ぶりですね。
立派です。
equals()とか、Dateクラスのところとか、完璧です。
この先はすんなりいきそうですね。
というわけで次回に続く。(パクリ)

はじめてのソフトウェア(7) ~日付を取得せよ 後編

2005-10-17 15:45:19 | はじめてのソフトウェア
続きです。
------------------------------------------------------------
当日を取得する。

当日はシステム日付で良いらしい。

Dateクラスに、システム日付を取り込んで確認してみる。

        Date dt = new Date(System.currentTimeMillis());
        System.out.println("当日:" + dt);

結果は
当日:Sat Oct 15 15:06:23 JST 2005
と出力された。

これと、さっきのファイルから取得した日付(設定日)とを比較することになる。
当日と設定日を比較するので、
        if (msg == dt) {
と書いてみたが、エラーになった。
DateクラスとStringクラスの比較はできないらしい。

検索すると、DateクラスはDateFormatクラスでStringにできるということなので、
やってみる。

        Date dt = new Date(System.currentTimeMillis());
        String buff = new String(DateFormat.getDateInstance().format(dt) );
        System.out.println("当日:" + buff);

実行結果は
当日:2005/10/15

これなら、ファイルの文字列を"2005/11/01"に変えれば出来そうである。

さっきのと組み合わせるとこうなる。

public class test {

    public static void main(String[] args) {
        String msg = null;
        try {
            FileInputStream fis;
            fis = new FileInputStream("hello.txt");
            InputStreamReader ir = new InputStreamReader(fis , "MS932");
            BufferedReader br = new BufferedReader(ir);
            msg = br.readLine();
            // 表示
            System.out.println("設定日:" + msg);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        
        Date dt = new Date(System.currentTimeMillis());
        String buff = new String(DateFormat.getDateInstance().format(dt) );
        System.out.println("当日:" + buff);
    }
}


実行結果は

設定日:2005/11/01
当日:2005/10/15


バッチリ。どちらも同じString型だし。

というわけで比較してみる。

        if (msg == buff) {
            System.out.println("同じ");
        } else {
            System.out.println("違う");
        }

結果は
設定日:2005/11/01
当日:2005/10/15
違う

OK!
今度は、ファイルを、2005/10/15に書き換えてみる。

設定日:2005/10/15
当日:2005/10/15
違う


あれ?
なんで「同じ」にならないの?

-----------------------------------------------------------------

システム日付の取得までうまくいったようですね。
型の意識もできました。

比較する場合ですが、数値を比較するような場合は"=="で出来るのですが、
数値以外の場合は"=="の意味が違ってきてしまいます。
文字列の内容を比較する場合には、equals()というメソッドで行います。
詳しくは「文字列を比較」で検索してみてください。

ちなみに、Stringは「同じ」か「違う」かの比較はできますが、大小の
比較はできません。
何か他の型にしないと、いけないようですな。

さて、どうしましょう。

はじめてのソフトウェア(6) ~日付を取得せよ 前編

2005-10-17 14:40:18 | はじめてのソフトウェア
ヤンコからのメールが長かったので分割しました。
まずは前編です。
----------------------------------------------------------------------

ファイルから日付を取得する。

1.ファイルからデータを取得する。

JavaでHello Worldを参考に
して書いたのが以下のソース。

public class test {

    public static void main(String[] args) {
        try {
            FileInputStream fis;
            fis = new FileInputStream("hello.txt");
            InputStreamReader ir = new InputStreamReader(fis , "MS932");
            BufferedReader br = new BufferedReader(ir);
            String msg = br.readLine();
            // 表示
            System.out.println(msg);
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

hello.txtに"20051101"と書いて保存したら、そのまま表示された。

次は当日との比較である。

当日と比較するような関数、じゃないやクラスとかメソッドがないかと思って
「当日と比較」で検索したらお前のサイトしかヒットしなかった。
虚しい。

当日を取得して、さっきの日付と比較する必要があるようだ。

ところで、メールで報告しているが、これを読んでいる人なんているのか?
----------------------------------------------------------------------
読んでくださっているやさしい方が少しはいらっしゃるようです。


ファイルの入出力はできましたね。
実際には日付を取得したわけではなくて、文字列を取得した状態です。

「当日と比較するという」ライブラリはないと思います。
(もしかしたらあるのかもしれませんが)
そういうメソッドを作ってしまうと、「当日と比較するメソッド」
「前日と比較するメソッド」「翌日と比較するメソッド」
「来月の同じ日と比較するメソッド」
という具合に、日付ごとにメソッドを作らなければならなくなってしまいますから
あまり実用的ではないのかもしれません。
当日を取得して比較する、というのが正解です。

ファイルからとってきた値はStringなので、もう一工夫いりそうです。
さて、ヤンコはどうやって解決するんでしょうか。

はじめてのソフトウェア(5) ~いよいよプログラミング

2005-10-07 18:20:19 | はじめてのソフトウェア
ヤンコからメールをもらっていたんですが、ちょっと忙しくて遅くなってしまいました。

------------------------------------
とっとと作ってみたいのだが。
めんどくさいもんやね。

前回のおさらい

機能仕様

削除アプリ
1.起動
 PC起動時に起動する。
 ウィンドウ、ダイアログは表示しない。
2.機能
 当日が設定ファイルの削除日付を過ぎていた場合、
 設定ファイルの削除ディレクトリを全て削除する。
3.終了
 2の処理が完了したら、終了する。

設定アプリ
 画面より、削除したい日付、ディレクトリを入力し、設定ファイルに保存する。
 削除ディレクトリは設定可能とする。



そして、削除アプリの動きは

1.削除アプリを起動する。
2.設定ファイルの削除日と当日を比較する。
3.削除日が当日以前のとき、設定ファイルから削除ディレクトリのディレクトリを削除する。
4.ディレクトリの削除が終わったらアプリを閉じる。

こんな感じ?

なんか機能仕様と変わってないような気がする。

で、次は何すんの?
------------------------------------
万が一、後で修正したり、機能を追加したりしたくなった時のために、最低限の資料は作っておいた方がよいのです。
今回は全部一人でやるから仕様は頭に入っていますが、将来ボケないとも限らないしね。

ほんとはもう少し細かくなりそうですが、それは作っているうちに必要に応じて考えましょう。
でも、項番1はナシです。
削除アプリを起動するのは、削除アプリ以外の何かが行う処理です。
ここでは削除アプリが行う処理だけを考えることにします。

いよいよお待ちかねのプログラミングです。
まずは、設定ファイルから内容を読み込む動きを作ってみましょう。
確認のために読み込んだ内容をSystem.out.printlnで出力してください。
設定ファイルはテキストファイルでよいです。
メモ帳開いて適当に書いて保存すればオーケーです。

それができたら当日と比較する方法を考えてみましょう。

とりあえずはそんなところで。

はじめてのソフトウェア(4) ~仕様書を書こう

2005-09-29 18:07:07 | はじめてのソフトウェア
ヤンコの今日のメールです。
------------------------------------
ありがたみは分かったが、なんか腹立つ。
プログラマーってのはマゾなのかと思ったね。


仕様と言われてもねぇ。
とりあえず思いつくところを書いてみよう。

1.起動
 PC起動時に起動する。
2.機能
 削除したい日付を指定できる。
 削除したいディレクトリを指定できる。
 当日が指定した日付を過ぎていた場合に、ディレクトリを削除する。
3.終了
 2の処理が完了したら、終了する。


こんな感じか?
なんか書いてみると簡単だな。
でもどうやってやるのかイメージが浮かばん。
どっから手をつけるんだ?
------------------------------------
たしかに多少のマゾっ気は・・・

それはさておき。

プログラムの仕様書だと考えると難しいですが、Readmeだと思えば
こんな感じでしょうね。

補足すると、アプリケーションは起動する際に、ウィンドウは開かない、
というのが必要です。
さらに削除するディレクトリを複数指定できることも書いておきましょう。

プログラムのレベルになると、日付やディレクトリの指定と、実際の削除
処理はタイミングが違うので、別々に記述することになります。
当日が指定日を過ぎていない場合の処理なんかも書かないといけないですね。

とりあえず作りたいものが明示されたので、どうやって実現するか考えましょう。
さっき処理のタイミングが違うと言ったように、日付やディレクトリを指定する
アプリ(以後「指定アプリ」)と、ディレクトリを削除するアプリ(以後「削除
アプリ」)に分けて考えます。

つまり、削除日やディレクトリの指定から、実際の削除処理までの流れは

1.指定アプリより、日付とディレクトリを入力し、設定ファイルに書き込む。
2.削除アプリは設定ファイルを読み込んで、削除処理を実行する。

となります。

設定ファイルを手で書いておけば、指定アプリは作らなくて良いので、
優先順位は低いと考えて、削除アプリから作ることにしましょう。

ということで、削除アプリの処理の流れを考えてください。

がんばれ~