« 2013年10月 | トップページ | 2014年2月 »

2013年12月

Java:文字コード変換ツールを作る(3)コマンドラインツール その2

今回は,前回の記事で作成したコマンドラインツールについて,文字コード変換の機能はそのままで入出力の仕様が異なるツールを作成してみます。
文字コード変換機能は前々回の記事のものをそのまま使います。
今回作成するツールの仕様は以下になります。

【仕様】
1. コマンドライン引数にファイルまたはディレクトリのパスを指定することができる。
1.1. 引数にファイルが指定されたときは,そのファイルを変換処理する。
1.2. 引数にディレクトリが指定されたときは,そのディレクトリに含まれるファイルを一括変換する。
1.3. 引数が指定されていない場合は,カレントディレクトリに含まれるファイルを一括変換する。
2. 出力ファイルを保存する場所として,入力ファイルと同じディレクトリに「utf8」というディレクトリを新規作成する。
2.1 すでに「utf8」というファイルまたはディレクトリが存在した場合はなにもせず終了。
3. 出力ファイルのファイル名は入力ファイル名と同じ。

※前回のツールとは2.以降が異なります。

【実装】
以上の仕様を実現するために,必要な機能を実装していきます。

■1入力ファイルに対して1出力ファイルを生成する。 入力が1ファイルの場合とディレクトリの場合に対応するために,入力ファイル1つに対する変換処理をまとめたメソッドを作ります。このメソッドは,前回作成した「convertOneFile」から出力ファイル名を生成するコードを省いたもので,前回同様入力ファイル1つに対して出力ファイル1つを生成します。

※下記コードの「ConvtoUTF8.convertFile(infile, outfile);」は前々回作成したコード変換プログラムです。

import java.io.File;
import java.io.IOException;

 

public class ConvtoUTF8
{
  //----------------------------------------------------------------------
  /**
   * 1入力ファイルのコード変換処理を行う。
   * @param outdir 出力ファイルを保存するディレクトリ。
   * @param infile 入力ファイル。
   */
  private static void convertOneFile (
    File  outdir,
    File  infile)
    throws IOException
  {
    if (infile.canRead()) {
      File outfile = new File(outdir, infile.getName());
      if (!outfile.exists()) {
        ConvtoUTF8.convertFile(infile, outfile);
        System.out.println(infile.getName());
      }
    }
  }
}

※上記コードでは,整形のため空白部分は全角スペースを使用しています。

■上記コードを起動するmain関数。

main関数の引数(args)からコマンドライン引数を取得するルールは,前回と同じくargs[0]を処理対象のファイルまたはディレクトリパスとして取得します。
また,引数が指定されておらずargsが空の場合はカレントディレクトリが処理対象です。
ここでは処理する対象を特定してconvertOneFileメソッドを実行するのは前回と同じですが,更に,事前に出力先ディレクトリを作成して出力先をconvertOneFileに渡します。
例外のcatchは前回同様main関数でのみ行います。これにより処理中に例外が発生した場合は,それ以降の処理をすべてキャンセルしてmain関数のcatchに飛んできます。

  //----------------------------------------------------------------------
  private static final String EXTENSION_NAME = "utf8";
  //----------------------------------------------------------------------
  /**
   * @param args コマンドライン引数。ファイルまたはディレクトリパス指定として解釈する。
   */
  public static void main(String[] args)
  {
    try {
      String pathStr = (0 < args.length)? args[0]: ".";
      File path = new File(pathStr);
      if (path.isDirectory()) {
        File outdir = new File(path, EXTENSION_NAME);
        if (!outdir.exists() && outdir.mkdir()) {
          File[] infiles = path.listFiles();
          for (File file : infiles) {
            if (!file.canRead()) { continue; }
            ConvtoUTF8.convertOneFile(outdir, file);
          }
        }
      }
      else if (path.canRead()) {
        File parent = path.getParentFile();
        File outdir = new File(parent, EXTENSION_NAME);
        if (!outdir.exists() && outdir.mkdir()) {
          ConvtoUTF8.convertOneFile(outdir, path);
        }
      }
    }
    catch (Exception ex) {
      ex.printStackTrace();
    }
  }

※上記コードでは,整形のため空白部分は全角スペースを使用しています。

以上の処理と前々回のコード変換を1つのクラス(「ConvtoUTF8」クラス)にまとめると,変換ツールが完成します。

【著作権表記】上記コードを含む本ブログのプログラムコードは,私的利用可,商用利用可,改変しての利用可です。利用の際に作者に許諾を得る必要はありません。

■関連書籍をAmazonで検索:[Java]
Java言語プログラミングレッスン 第3版(上) Java言語を始めよう(kindle版)


にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ プログラム・プログラマへ 人気ブログランキングへ ←この記事が役に立ったという方はクリックお願いします。


高速・夜行バス予約サイト WILLER TRAVEL 高速・夜行バス予約サイト WILLER TRAVEL

| | トラックバック (0)

« 2013年10月 | トップページ | 2014年2月 »