目次へ

解答例 - 実習課題2 - 10.メッセージダイジェスト

(実習課題2)

サンプルのプログラムを改良し、同時にファイルの中身も表示できるようにすること。ファイルはテキストファイルを対象とすること。

解答例

/**
 * CalculateHashValueOfFile.java
 * TECHSCORE Java10章 実習課題2
 *
 * Copyright (c) 2004 Four-Dimensional Data, Inc.
 */
package com.techscore.utility.chapter10.exercise2;

import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.FileInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.IOException;

public class CalculateHashValueOfFile {

    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("調べたいファイル名を入力してください。");
            System.out.println("Usage:$java com.techscoreutility.chapter10.exercise1.
			CalculateHashValue arg1 arg2 ...");
            return;
        }
        try {
            System.out.println("■ファイル[" + args[0] + "]の内容");
            MessageDigest md = MessageDigest.getInstance("MD5");
            DigestInputStream input = new DigestInputStream(new FileInputStream(args[0]), md);
            InputStreamReader ir = new InputStreamReader(input, "EUCJP");
            BufferedReader readBuffer = new BufferedReader(ir);
            System.out.println("■ファイルの中身");
            String line;
            while((line = readBuffer.readLine()) != null) {
                System.out.println(line);
            }
            byte[] digest = md.digest();
            StringBuffer buffer = new StringBuffer();
            for(int i = 0; i < digest.length; i++) {
                String tmp = Integer.toHexString(digest[i] & 0xff);
                if(tmp.length() == 1) {
                    buffer.append('0').append(tmp);
                } else {
                    buffer.append(tmp);
                }
            }
            System.out.println("■ファイルの中身のハッシュ値");
            System.out.println("[0x"+ buffer + "]");
            input.close();
        } catch(FileNotFoundException e) {
            System.err.println("入力された名前のファイルが存在しません。");
        } catch(IOException e) {
            System.err.println("ファイルの入出力エラーが発生しました。");
        } catch(NoSuchAlgorithmException e) {
            System.err.println("指定したハッシュ値計算アルゴリズムは存在しません。");
        }
    }

}
▼ソース
com/techscore/utility/chapter10/exercise2/CalculateHashValueOfFile.javaを表示
▼テスト用データ data.txtの中身
a
bc
def
ghi
jklm
あいうえお
12345
678
▼起動例
# java com.techscore.utility.chapter10.exercise2/CalculateHashValueOfFile data.txt
▼実行結果
■ファイル[data.txt]の内容
■ファイルの中身
a
bc
def
ghi
jklm
あいうえお
12345
678
■ファイルの中身のハッシュ値
[0xce5523dd6fbf85310c0cf8d2fad07fa9]

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp