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

締切り済みの質問

ストリームの問題について【至急】

import java.io.*;
public class FileStreamDemo {
public static void main(String[] args){
try{
byte[] buffer=new byte[1024];
FileInputStream fileInputStream=
new FileInputStream(new File(args[0]));
FileOutputStream fileOutputStream=
new FileOutputStream(new File(args[1]));
System.out.println("コピーファイル: "+fileInputStream.available()+"バイト");
while(true){
if(fileInputStream.available()<1024){
int remain=-1;
while((remain=fileInputStream.read())!=-1){
fileOutputStream.write(remain);

}
break;
}
else{
fileInputStream.read(buffer);
fileOutputStream.write(buffer);
}
}
fileInputStream.close();
fileOutputStream.close();
System.out.println("コピー完了");

}
catch(ArrayIndexOutOfBoundsException e){
System.out.println(
"using:java FileStreamDemo src des");
e.printStackTrace();

}
catch(IOException e){
e.printStackTrace();
}
}
}
JAVAの入門者です。
JAVAの教科書に書いてあるように、上のプログラムを書きましたけど…
コンパイルすると、エラーメッセージが出て来ます。
エラー中身は下記のとおりです。
【using:java FileStreamDemo src des
java.lang.ArrayIndexOutOfBoundsException: 0
at FileStreamDemo.main(FileStreamDemo.java:8)

どうすればいいのか悩んでいます。
誰か、助けていただけないのでしょうか?どこか間違ってるか、教えてください。
よろしく、お願いします。

投稿日時 - 2008-03-28 16:17:21

QNo.3902274

すぐに回答ほしいです

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

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

回答(2)

ANo.2

エラー原因を特定する為に重要となるのがエラーメッセージです。
java.lang.ArrayIndexOutOfBoundsException: 0
at FileStreamDemo.main(FileStreamDemo.java:8)
はスタックトレースといって、エラー箇所を表しています。
at FileStreamDemo.main(FileStreamDemo.java:8)
ということですからエラー箇所はFileStreamDemo.javaの8行目です。
なぜ8行目でエラーなのかというとArrayIndexOutOfBoundsExceptionなわけです。
javadocでArrayIndexOutOfBoundsExceptionの意味を調べればわかると思います。
「不正なインデックスを使って配列がアクセスされたことを示すためにスローされます。つまり、インデックスが負または、配列のサイズ以上の場合です。 」
だそうです。
8行目で配列を使っているといえば、「new FileOutputStream(new File(args[1]));」のあたりでしょうか・・・ちょっと行数が違う気がしますが・・・。
つまりargs[1]というのが原因みたいです。
ちなみにこの場合、「args」はコマンド実行時の引数となっていますので、jyugemu55様のおっしゃるようにファイルが2つちゃんと指定されていないのかもしれません。

っとこんな風にエラー原因がわかれば解決できるかと思います。
今後のエラー解決の参考にして頂ければ幸いです。

それにしても、「java.lang.ArrayIndexOutOfBoundsException: 0」ってインデックス0でエラーっていうことだと思うですが、、、。
だとするとエラー箇所は「new FileInputStream(new File(args[0]));」かもしれませんね。貼り付けて頂いたソースの行数がちょっと違うのかなぁ。

参考URL:http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/lang/ArrayIndexOutOfBoundsException.html

投稿日時 - 2008-03-28 23:29:43

ANo.1

コンパイルでエラーですか?
実行時のエラーであれば、コマンドラインからファイル名を引数として与えていないということが考えられます。

下記のように二つのファイル名をスペースで区切って入力してみてください。
> java FileStreamDemo file1 file2

投稿日時 - 2008-03-28 18:42:16

あなたにオススメの質問