import java.io.*;
import java.util.*;

//*****************************************************************************
/**
 * ファイル内のラインの数をカウントするクラスです。
 *
 * @author  wang zhanwei
 * @version 1.0, 2002.06.11, 新規作成
 */
//*****************************************************************************
public class converter {

  //変数定義
  public static String outputFileName;
  public static PrintWriter out = null;
  public static PrintWriter outSum;
  public static int count;
  public static String filePath;

  //*****************************************************************************
  /**
   * メインクラスです。コマンドの引数解析と不足情報の補完を行います。
   *
   * @param args 引数
   */
  //*****************************************************************************
  public static void main(String[] args) {

    try {

      String encoding = "";

      //ファイルパースは空が時
      filePath = args[0];
      if (filePath == null) {
        System.out.println("filePath name is null.");
        System.exit(0);
      }

      //出力のファイルは空が時
      outputFileName = args[1];
      if (outputFileName == null) {
        System.out.println("outputFile name is null.");
        System.exit(0);
      }

      //ディレクトリをチェック
      File newFile = new File(filePath);
      if (newFile.isDirectory() == false) {
        System.out.println("filePath name is not directory.");
        System.exit(0);
      }

      readFile(newFile);

      //ファイルライン総計
      outSum = openWriter(outputFileName);
      outSum.println();
      outSum.println();
      outSum.write("ライン総計が" + count + "です");

    } catch (Exception ex) {
      ex.printStackTrace();
    } finally {
      if (out != null) out.close();
      if (outSum != null) outSum.close();
    }
  }

  //*****************************************************************************
  /**
   * ファイル内のライン数をカウントします。
   *
   * @param filename 検索対象ファイル名
   * @param encoding Javaエンコーディング名
   * @excetion IOException ファイル入力エラー
   */
  //*****************************************************************************
  public static void readFile(File file) throws Exception {

    String[] fileList = file.list();
    String fileName = null;
    int sum = 0;
    int length = fileList.length;
    for (int i = 0; i <= length - 1; i++) {
      fileName = fileList[i];
      File temp = new File(filePath + fileName);
System.out.println("curren file path :" + temp.getPath());
      if (temp.isFile() == true && temp.isDirectory() == false) {
        sum = countWord(filePath + fileName, "");
      } else if (temp.isFile() == false && temp.isDirectory() == true) {
        fileList = temp.list();
        length = fileList.length - 1;
        filePath = filePath + fileName + "/";
        readFile(temp);
      } else {
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
      }
      count += sum;
    }
  }

  //*****************************************************************************
  /**
   * ファイル内のライン数をカウントします。
   *
   * @param filename 検索対象ファイル名
   * @param encoding Javaエンコーディング名
   * @excetion IOException ファイル入力エラー
   */
  //*****************************************************************************
  public static int countWord(String filename, String encoding) throws IOException {
    BufferedReader reader = null;
    try {
      if (encoding.trim().equals("")) {
        reader = openReader(filename);
      } else {
        reader = openReader(filename, encoding);
      }

      StringBuffer buf = new StringBuffer();
      int number = 0;

      String line = "";
      while ((line = reader.readLine()) != null) {
        buf.append(line);
        buf.append('\n');
        number++;
      }

      if (out == null) {
        if (encoding.trim().equals("")) {
          out = openWriter(outputFileName);
        } else {
          out = openWriter(outputFileName, encoding);
        }
      }

      out.write("ファイル「" + filename + "」中にライン数は" + number + "行見つかりました。");
      out.println();

      return number;
    } finally {
      if (reader != null) reader.close();
    }
  }

  //*****************************************************************************
  /**
   * ファイル読み込みを開始します。
   *
   * @param filename ファイル名
   * @param encoding Javaエンコーディング名
   * @return ファイル読み込みクラス
   */
  //*****************************************************************************
  public static BufferedReader openReader(String filename, String encoding)
      throws FileNotFoundException, UnsupportedEncodingException {
    FileInputStream fin = new FileInputStream(filename);
    InputStreamReader inrd = new InputStreamReader(fin, encoding);
    BufferedReader in = new BufferedReader(inrd);
    return in;
  }

  public static BufferedReader openReader(String filename)
      throws FileNotFoundException, UnsupportedEncodingException {
    FileInputStream fin = new FileInputStream(filename);
    InputStreamReader inrd = new InputStreamReader(fin);
    BufferedReader in = new BufferedReader(inrd);
    return in;
  }

  //*****************************************************************************
  /**
   * ファイル書き込みを開始します。
   *
   * @param filename ファイル名
   * @param encoding Javaエンコーディング名
   * @return ファイル書き込みクラス
   */
  //*****************************************************************************
  public static PrintWriter openWriter(String filename)
      throws FileNotFoundException, UnsupportedEncodingException {
    FileOutputStream fout = new FileOutputStream(filename);
    OutputStreamWriter outwr = new OutputStreamWriter(fout);
    PrintWriter out = new PrintWriter(outwr);
    return out;
  }

  public static PrintWriter openWriter(String filename, String encoding)
      throws FileNotFoundException , UnsupportedEncodingException {
    FileOutputStream fout = new FileOutputStream(filename);
    OutputStreamWriter outwr = new OutputStreamWriter(fout, encoding);
    PrintWriter out = new PrintWriter(outwr);
    return out;
  }
}