Show page source of スタンドアロン版Camelの例 #78029

「ファイルを一方のフォルダから他方のフォルダにコピーする」サンプルを例にとり、色々な方法でやってみる。

== Javaで作成 ==

以下のモデルをJavaで作成してみる。

[[Thumb(fileToFileJava.png, size=large, caption=送信元フォルダにあるファイルを送信先にコピーする)]]

ネットの情報を参考にJavaのみで書いてみる。

{{{ code java
public class Main {
	public static void main(String args[]) throws Exception {
		File inboxDirectory = new File("/home/knoppix/Desktop/inbox");
		File outboxDirectory = new File("/home/knoppix/Desktop/outbox");
		outboxDirectory.mkdir();
		File[] files = inboxDirectory.listFiles();
		for (File source : files) {
			//出力ファイル名の拡張子を日付に変える
			Date date = new Date();
			SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd'-'HH'.'mm'.'ss");

			String[] strArray = source.getName().split("\\.");
			String destFileName ="";
			for(int i=0; i<strArray.length-1;i++){
				destFileName +=destFileName.concat(strArray[i]);
			}
			destFileName += destFileName.concat("." + sdf1.format(date));
			
			File dest = new File(outboxDirectory.getPath() + File.separator
					+ destFileName);
			copyFile(source, dest);
		}
	}

	private static void copyFile(File source, File dest) throws IOException {
		OutputStream out = new FileOutputStream(dest);
		byte[] buffer = new byte[(int) source.length()];
		FileInputStream in = new FileInputStream(source);
		
		in.read(buffer);
		try {
			out.write(buffer);
			System.out.println("Copy from " +source.getAbsolutePath() + " To " + dest.getAbsoluteFile());
		} finally {
			out.close();
			in.close();
		}
	}
}
}}}

このような感じになる。後述するCamelを使う場合に比べ下記の問題がある。
 * フォルダが変更になったり、送信先が増えたり、プロトコルが変わったり(例えばFTP送信に変更)した場合、コードの変更が煩雑になり、要件が増えるにつれてコードが読みにくくなる
 * プログラム起動時に送信元フォルダにあったファイルだけが処理される。頻繁に送信元フォルダにファイルが置かれる場合、cron等を使って定期的にプログラムを起動する必要がある
 * エラーの場合、特殊ケースに対する処理が貧弱(というかない!)。様々なパターンを考慮したコードを追加する必要がある。
   * 例えばフォルダがない場合、同一ファイルの扱い、途中でシステムダウンした場合…


== Camelで作成 ==