5月18日

前回来てなかった人

テキストの以下のサンプルを入力して実行してみよう!

  • WriterSample2
  • ReaderSample
  • FileCopy
  • CloseSample
  • DownloadSample
  • FileSample

Java7から自動でcloseしてくれる機能が追加された。
try-with-resources文を使うと自動的にcloseしてくれる。
自動でcloseしてくれるオブジェクトは、AutoClosableインタフェースを実装しているクラス。
以下のコードを入力して、CloseSampleと比較してみよう!

CloseSample2.java

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
 
public class CloseSample2 {
 
    public static void main(String[] args) throws IOException {
        String src = "hoge.txt";
        String dest = "hoge2.txt";
        copy(dest, src);
    }
 
    public static void copy(String dest, String src) throws IOException {
        try (InputStream in = new FileInputStream(src);
             OutputStream out = new FileOutputStream(dest)) {
            int len;
            byte[] b = new byte[1024];
            while (true) {
                len = in.read(b);
                if (len < 0) break;
                out.write(b, 0, len);
            }
        }
    }
}

前回来ていた人

Comparatorを実装して、ファイルを日付順とサイズ順でソートできるようにしてみよう!

Dir.java

import java.io.File;
import java.util.Arrays;

public class Dir {

	public static void main(String[] args) {
		String path;
		String option = null;
		if (args.length == 0) {
			path = ".";
		} else {
			path = args[0];
			option = getOption(args);
		}
		File file = new File(path);
		dir(file, option);
	}

	private static String getOption(String[] args) {
		for (String s : args) {
			if (s.startsWith("/")) {
				return s;
			}
		}
		return null;
	}

	static SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

	private static void dir(File parent, String option) {
		System.out.println("option=" + option);
		File[] children = parent.listFiles();
		if (children != null) {
			if (option == null) {
				// ソートなし
			} else
			if (option.equals("/ON")) {
				// 名前順
				Arrays.sort(children, new FileNameComparator());
			} else
			if (option.equals("/OD")) {
				// 日付順
				Arrays.sort(children, new FileDateComparator());
			} else
			if (option.equals("/OS")) {
				// サイズ順
				Arrays.sort(children, new FileSizeComparator());
			}
			for (int i = 0; i < children.length; i++) {
				File file = children[i];
				String d = formatter.format(file.lastModified());
				System.out.println(file.getName() + "\t" + file.length() + "\t" + d);
			}
		}
	}
}

FileNameComparator.java

import java.io.File;
import java.util.Comparator;

public class FileNameComparator implements Comparator<File> {
	@Override
	public int compare(File o1, File o2) {
		String n1 = o1.getName();
		String n2 = o2.getName();
		return -n1.compareTo(n2); // マイナスをつけて逆順にしている
	}
}

FileDateComparator.java

import java.io.File;
import java.util.Comparator;

public class FileDateComparator implements Comparator<File> {
	@Override
	public int compare(File o1, File o2) {
		long l1 = o1.lastModified();
		long l2 = o2.lastModified();
		if (l1 < l2) return -1;
		if (l2 < l1) return 1;
		return 0;
	}
}

コマンドプロンプトでの実行

作業ディレクトリに移動する。
現在は、c24 プロジェクトでプログラムを作成しているので、c24 のフォルダに移動する。

> cd \All-in-One-Eclipse4.4\workspace\c24

java コマンドを実行して Dir プログラムを起動する。

> java -cp bin Dir src /OD

java : java コマンド
-cp : クラスパスを指定するオプション(クラスファイルがbinフォルダにあるため)
bin : クラスファイルがある bin フォルダを指定している
Dir : 起動するクラスファイルを指定
src : ファイルの内容を表示するフォルダを指定している
/OD : ソートのオプションを指定している

テスト駆動開発

FizzBuzz でテスト駆動開発の練習をする。

FizzBuzz.java


public class FizzBuzz {
	public String say(int i) {
		return null;
	}
}

FizzBuzzTest.java

import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;

import org.junit.Test;


public class FizzBuzzTest {

	@Test
	public void testSay1() {
		FizzBuzz fb = new FizzBuzz(); // インスタンスを生成
		String s = fb.say(1); // say(1)を呼び出して結果を取得する
		assertThat(s, is("1")); // 結果が "1" かどうかを比較
	}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です