- 締切済み
ストリームの問題について【至急】
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) 】 どうすればいいのか悩んでいます。 誰か、助けていただけないのでしょうか?どこか間違ってるか、教えてください。 よろしく、お願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- chomakichi
- ベストアンサー率57% (22/38)
エラー原因を特定する為に重要となるのがエラーメッセージです。 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]));」かもしれませんね。貼り付けて頂いたソースの行数がちょっと違うのかなぁ。
- jyugemu55
- ベストアンサー率68% (11/16)
コンパイルでエラーですか? 実行時のエラーであれば、コマンドラインからファイル名を引数として与えていないということが考えられます。 下記のように二つのファイル名をスペースで区切って入力してみてください。 > java FileStreamDemo file1 file2