すいません、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)

このQ&Aに関連する最新のQ&A

A 回答 (2件)

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


動かしてみればいいじゃない。

基本的な構造はいいと思うわよ。
    • good
    • 0
この回答へのお礼

askaaskaさん

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

お礼日時:2009/05/14 10:42

要するに


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

new BufferedReader(new FileReader

new BufferedInputStream(new FileInputStream

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

この回答への補足

askaaskaさん

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

補足日時:2009/05/13 07:11
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJavascriptからJSPファイル(~.jsp)を起動する時、引数

JavascriptからJSPファイル(~.jsp)を起動する時、引数を渡したい。また、jspファイル終了後、jspからのリターン値(もくしは引数)をjavascriptで参照したい。
 ※要するに javasript → jsp 起動
 起動jspファイル終了時、javascript側でjspファイルの処理結果を判定したい。

どうすれば良いですか?

Aベストアンサー

要するに、JAVSCRIPTを使って、サーバーサイドのJSPとAJAX(非同期通信)
するという意味ですかねえ?
 それなら、PHPやCGIの場合とあまりちがわないと思うんですが...
あまりくわしくないですが、
HTML(JAVASCRIPT)側からPOST、GET要求したデーターは、
JSP側は
 「request.getParameter(java.lang.String name)」
で受け取れます。
逆にheader指定は、
<%@ page contentType="text/html; charset=utf-8" %>
で、出力は
<% out.print(hoge); %>とか<%= hoge %>
みたいに、ASPやPHPとかまあ、みんな同じようなもんですね。
ヒアドキュメントもあるのかな。

QSystem.err. printlnとSystem.out.printlnはどう違うんでしょうか?

 初心者なので今までSystem.out.println文しか見たことがなかったのですが、テキストで急にIOExceptionのcatch文の中にSystem.err. println文が出てきました。
 errをoutに書き換えてもエクリプスではチェックされなかったのですが、どういう違いがあるのでしょうか?

Aベストアンサー

出力先が「標準出力」か「標準エラー出力」かの違いです。

Windows環境ですと、
標準出力はコンソール(コマンドプロンプト、もしくはDOS窓のこと)に出力されます。
標準エラー出力も同じくコンソールに出ます。

ただし、リダイレクト機能を使ったときに違いが表れます。
リダイレクトとは、
>program > a.txt
のように、標準出力をするプログラムの出力を、
テキストファイルに書き出すことです。
Javaでも、コンソールへのテキスト出力をするプログラムだったら、
>java nantoka > a.txt
で、a.txtにテキストが書き込まれると思います。
試してみてください。

それで、「標準エラー出力」の方は、
リダイレクトをしてもリダイレクトされず、
コンソールにテキストが書き出されます。
標準エラー出力は、通常、エラーが起こったときの
表示に使うもので、
これまでリダイレクトされてしまうと、
ユーザーがエラーを検知できなくなるからです。

ためしに
System.out.println("ABCD");
System.err.println("いろはに");
System.out.println("EFG");
System.err.println("ほへと");
と出力するtestプログラムを作って、

>java test

>java test > a.txt
として、動作の違いをたしかめてみてください。

(付記:どうしてもエラー出力をリダイレクトしたい場合、
>のかわりに2>を使うことによって可能です。
Linux系ではシェルによって違いがあります)

出力先が「標準出力」か「標準エラー出力」かの違いです。

Windows環境ですと、
標準出力はコンソール(コマンドプロンプト、もしくはDOS窓のこと)に出力されます。
標準エラー出力も同じくコンソールに出ます。

ただし、リダイレクト機能を使ったときに違いが表れます。
リダイレクトとは、
>program > a.txt
のように、標準出力をするプログラムの出力を、
テキストファイルに書き出すことです。
Javaでも、コンソールへのテキスト出力をするプログラムだったら、
>java nantoka > a.txt
で、a.tx...続きを読む

QhtmlまたはJavascriptからファイルを引数つきで起動する。

htmlまたはJavascriptからファイルを引数つきで起動する。

マクロ(macro.xls)に引数(csvファイル名)を渡して起動させたいため、
vbsを作成してマクロを引数つきで実行するようにしました。

コマンドからは
>test.vbs /FILE:macro.xls /P:aaa.csv

でマクロを実行することができたのですが、

HTMLにリンクを張り、リンクをクリックすることで
vbsを引数つきで実行するにはどうすればよいでしょうか?
(Javascriptを経由しても構いません)

Aベストアンサー

当然、Windows IE限定のお話ですよね。

どおしてもHTMLでやりたいなら、test.vbsなんて余計な物を作らずに、
直接javascript(MsのJscript)のActiveXオブジェクトを使って、
直接ExcelApplicationオブジェクトを作って、Excelオブジェクト
のクラスメソッドを使って、ファイルの読み込み、マクロの実行を
すればよいんじゃないかと、Excelオブジェクトをシームレスで動かせば、
Excelを見せなくして、マクロ実行だけこっそりさせる事も出来ます。

※だから、セキュリティ制限が厳しいのです。IEで、信頼済みサイトに登録する
必要があります。


<body>
----------
<p>
<a name="button_no_kawari" onclick="Excel_open('xxx.xls');return false;">
エクセルを実行</a>
</p>
----------
<script type="text/javascript">
<!--
 function Excel_open(pgm_name){
  var pgm_path = "c:/プログラム/";
  var file_name = pgm_path + pgm_name;
  var Excel = new ActiveXObject("Excel.Application");
  Excel.Visible = true;
  Excel.Workbooks.Open(file_name,0,"true"); 
  Excel.Workbooks(pgm_name).Sheets("Menu").Activate;
 //他にもいろいろExcelを操作出来る
  Excel.Application.Run("main"); //<=マクロ"main"実行
  Excel = "";
 }
// -->
</script>
</body>

当然、Windows IE限定のお話ですよね。

どおしてもHTMLでやりたいなら、test.vbsなんて余計な物を作らずに、
直接javascript(MsのJscript)のActiveXオブジェクトを使って、
直接ExcelApplicationオブジェクトを作って、Excelオブジェクト
のクラスメソッドを使って、ファイルの読み込み、マクロの実行を
すればよいんじゃないかと、Excelオブジェクトをシームレスで動かせば、
Excelを見せなくして、マクロ実行だけこっそりさせる事も出来ます。

※だから、セキュリティ制限が厳しいのです。IEで、信頼済みサイト...続きを読む

QSystem.out.printlnの出力先

System.out.printlnはデフォルトでコンソール出力になっていますが、ファイルなどへ出力先を変更することはできますか?

Aベストアンサー

System.outは「標準」出力を示すオブジェクトです。
デフォルトではコンソールになっています。
そこで、この「標準」を変更するために
System#setOut(PrintStream out)
が用意されています。

PrintStream ps=new PrintStream("hoge.txt");
System.setOut(ps);
System.out.println("Hello");
ps.close();

などとすればファイルに出力されます。

QJavaScriptの関数の引数省略について

JavaScriptの関数で、下記のような引数の省略はできるでしょうか?

【例】

function hoge(aaa, bbb){}

hoge(,"できるかな");←このような引数の省略はできるでしょうか?

--------------------

しらべてみると、引数が2つあった場合、後方の引数の省略はできることがわかりました。

【例】
hoge("できるかな");←この場合できます。


しかし、引数が2つあった場合、前方の引数省略の例は見つけることができませんでした。
前方の引数を省略することはできるのでしょうか?
よろしくお願いします。

Aベストアンサー

>hoge(,"できるかな");

そういう引数の省略をする言語もありますが、javascriptでは
文法上間違っているのでエラーで処理されます

どうしてもやりたいならnullでも与えてあげてください
(まぁ省略になっていないですが・・・)

hoge(null,"できるかな");

あとは姑息に無理やり配列で渡すなどすれば似たようなことは
できないことはないですが、あまりお勧めはできません。

<script>
function func(){
var a=arguments[0][0];
var b=arguments[0][1];
document.write("1st:"+a+"<br>");
document.write("2nd:"+b+"<br>");
}
func(["hoge","fuga"]);
func([,"piyo"]);
</script>

Aベストアンサー

LN=LINE

lineの略ではないでしょうか
begin a new line (行を改める)で
改行ではないかと

Qjavascriptに引数を渡す方法について

お世話になります、
javascriptに下記のように引数を渡して
表示したいのですがうまくいきません。
<script language="javascript">
function dispData(msg)
{
document.write(msg);
}
</script>

$a = "hoge";
echo "<a href='#' onclick='javascript:dispData($a)'>" . $a . "</a><br>";
とすると動作してくれません。
$aをシングルコートで囲っても同じです。
$a = "/hoge/";をやると/hoge/を表示されます。
コーディングの方法を教えて頂きたいのですが。
dispData()に引数を渡して処理を行いたいもので。
よろしくお願い致します。

Aベストアンサー

document.writeする意味がわかりませんが・・・
きちんとクォーテーションをつけてやればわたりませんんか?

<script language="javascript">
function dispData(msg){
alert(msg);
}
</script>
<?
$a = "hoge";
echo "<a href='#' onclick='javascript:dispData(\"$a\")'>" . $a . "</a><br>";
?>

QSystem.out.println(new 文)て?

javaを勉強しています。カレンダーを作ろうと思い、以下のURLのカレンダーのコードを勉強していたのですが、タイトルのSystem.out.println(new文)の意味が分かりません。
下記のコードで言うと、;のつく文では一番下の文です。
よろしくお願いします。

http://www7a.biglobe.ne.jp/~java-master/samples/datetime/MonthlyCalendar.html

Aベストアンサー

>System.out.println(new文)の意味が分かりません。
System.out.println( (new MonthlyCalendar(currentYear, month)).toString() );
という意味。マニュアルくらい読もうぜ。

Qjavascript外部読み込みの際の引数

教えてください。

HTML内で以下のように ?ver=12 と引数付きでjavascriptを読み込みます。
<script type="text/javascript" src="hoge.js?ver=12"></script>


このver=12をhoge.js内で利用するにはどうやって取得したらよいでしょうか?



※画像等のキャッシュの制御のためにバージョンナンバーをつけて管理します。

Aベストアンサー

一例です。

(function(){
var sc = document.getElementsByTagName("script");
var ver = sc[sc.length-1].src.match(/\?ver=(\d+)$/);
if(ver) ver = ver[1];
alert(ver);
})();

Qclass Test_A {  main(){}}の実行順序は?

public class Test_A {
public static void main(){

int a = 0;
int b = 1;

}
}
例えば上のようなサンプルで何故 main()がクラスTest_A の中に挟まっているのでしょうか?実行順序としては main()が終了したら、クラスTest_A の方はどうなるのでしょうか? main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。よろしくお願いします。 

Aベストアンサー

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時には、Test_Aクラスのインスタンスは生成されません。
質問のコードでは変数a,bに値が代入され、それで終わりです。

Javaでは、(正確にはJavaVMは)実行するclassファイルにある、
String[]引数を持ったvoid mainメソッドを実行する仕様になっています。
しかし、mainメソッドを実行するときには何のインスタンスも生成されていないので、
何かのインスタンスのメソッドを実行することはできません。
なので、staticなメソッドでないとJavaVMが実行できないのです。
さらに、JavaVMからアクセス可能なスコープを与える必要があるので、
publicである必要もあるのです。

あとは、そのmainメソッドに指定されたコードを実行し、mainメソッドの最後まで処理が進んだら
そこでJavaVMが終了し、プログラムも終了します。

※細かい話ですが、main()からプログラムは始まりません。
正確に言うと、引数なしのmain()メソッドは他のメソッドと何ら代わりがありません。
プログラムを始めるには、
アクセススコープがpublicで、staticな戻り値のなく、引数にString配列を取るmainメソッド
であることが必要です。つまり、
public static void main(String[] args)
とするのが通常です。
試しに質問のコードをjavaコマンドで実行すると、NoClassDefFoundErrorが出るはずです。

>main()がクラスTest_A の中に挟まっているのでしょうか

Javaは、全てのプロパティ、メソッドはどこかのクラスに属していないといけないからです。
mainメソッドであっても例外ではありません。

>main()からプログラムが始まるのは分かるのですが、その後の動作が分かりません。

これを考える上で最も重要なのはmainメソッドがstaticであることです。
staticなメソッドは、そのクラスのインスタンスを作らなくても、
つまり、new Test_A();としなくても実行することが可能です。
プログラム実行時...続きを読む


人気Q&Aランキング