こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

コマンドライン引数

すいません、java初心者です。
コマンドライン引数として渡されたファイルを16進表示したいのですが、右のテキスト部分の文字のあいうえおなどの日本語部分が出てきこず途中で止まってしまいます・・・
何が悪いか、改善方法教えてください!!
宜しくお願い致します!!!!


import java.io.*;

class Lesson1{

static char ch[]= {'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F' }; //16種類


static int c1,c2;

public static void main(String args[]) {

System.out.println("Address 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF");
System.out.println("--------+--------------------------------------------------+------------------");

if(args.length !=1){
System.out.println("ファイル名を指定してください。"); //ファイルがついてない場合。
System.exit(1);


}

try {
//入力ストリームを作成。
FileInputStream fis= new FileInputStream(args[0]); //ファイル読み取り
//InputStreamReader in = new InputStreamReader(fis, "SJIS");

BufferedReader br=
new BufferedReader(new FileReader(args[0]));


// 読込みループ。
int d=0;
int c; // 読み込んだものをsに入力。
String str;
int n = 0, k = 16; //0~Fまでの数字
String s="";

while( (c = in.read()) != -1) {

if( k > 15 ) {
System.out.println(" "+s); //右のパーツ
s = "";
System.out.printf("%08X: ",n); //Address
k = 0;
}


d++; //バイト数表示
n++; k++;
// 整数cを上位4ビットc1、下位4ビットc2に分解。
c1 =c/16; c2 =c%16;


System.out.print(" " + ch[c1] + ch[c2]); //真ん中のパーツ。

//System.out.printf(" "+Integer.toHexString(c));

if( (c<= 0x00 || c<= 0x19) ) { //右のパーツ(表示できない場合
s = ".";
}

else{
//表示できる場合
s =s+(char)c;

}

}


//String s1=String.valueOf(c);
//int len =s.length();
System.out.println("");
System.out.println("");
System.out.println("ファイルサイズは"+d+"byteでした。");

// 入力ストリームを閉じる。
in.close();
}
catch ( IOException e ) {
System.out.println("ファイルの読み込みに失敗しました。"); //ファイル名が正しくない場合。
}


}

}






実行結果
Address 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF
--------+--------------------------------------------------+------------------

00000000: 31 32 33 34 35 36 37 38 39 30 61 62 63 64 65 66 1234567890abcdef
00000010: 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 ghijklmnopqrstuv
00000020: 77 78 79 7A 41 42 43 44 45 46 47 48 49 4A 4B 4C wxyzABCDEFGHIJKL
00000030: 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5AException in thread "main" j
ava.lang.ArrayIndexOutOfBoundsException: 772
at Lesson1.main(Lesson1.java:55)

投稿日時 - 2009-05-12 17:43:53

QNo.4953037

すぐに回答ほしいです

質問者が選んだベストアンサー

> っということは、右をbyte1配列で保持すれば今の流れは変えなくて良いということですか
動かしてみればいいじゃない。

基本的な構造はいいと思うわよ。

投稿日時 - 2009-05-13 13:28:15

お礼

askaaskaさん

ありがとうございました!!
何とか完成しました!!!

投稿日時 - 2009-05-14 10:42:20

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(2)

ANo.1

要するに
バイナリエディタよね。
だとするとファイルをテキストとしてではなく
バイナリとして読むことをしないとダメよ。

new BufferedReader(new FileReader

new BufferedInputStream(new FileInputStream

それと右のパーツは
一旦byte配列で保持して
出力する際にStringに変換して出力すること。

投稿日時 - 2009-05-12 18:27:05

補足

askaaskaさん

回答ありがとうございます!!
っということは、右をbyte1配列で保持すれば今の流れは変えなくて良いということですか??

投稿日時 - 2009-05-13 07:11:25

-広告-
-広告-
-広告-
-広告-