• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaで画像ファイルの入出力方法)

Javaで画像ファイルの入出力方法

このQ&Aのポイント
  • Javaアプリケーションで画像ファイルの入出力方法を探しています。画像データをバイナリとして取得し、別のディレクトリに同じ画像を複製する方法を知りたいです。
  • 現在、FileInputStreamやFileOutputStreamを使用して画像ファイルのコピーを試みていますが、データの差異があり、画像が正しく表示されません。
  • 以下のソースコードを使用して画像ファイルのデータを読み込み、新しいファイルに書き込んでいます。しかし、うまくいっていません。良い方法があれば教えてください。

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

  • ベストアンサー
  • ct27
  • ベストアンサー率62% (48/77)
回答No.1

画像ファイルにReader、Writerのクラスを使用してはいけません。 このクラスはデータをテキスト形式で処理します。なので画像ファイル の場合はバイナリ形式のまま処理するStream系のクラスを使いましょう。 ということでたぶん FileReader → FileInputStream BufferedReader → BufferedInputStream BufferedWriter → BufferedOutputStream OutputStreamWriter → ObjectInputStream になるのではないかと。 参考URLはクラスの意味をわかりやすく説明しているので参考にして下さい。

参考URL:
http://java-house.jp/ml/archive/j-h-b/017380.html#body
takataka111
質問者

お礼

以下の方法で成功しました、ありがとうございました。 m(_ _)m //画像ファイルのデータを読み込む FileInputStream fr=new FileInputStream(filePath); //読み込んだ画像ファイルデータをファイルに書き込む File fil = new File("c:\\image\\aoki.gif"); fil.createNewFile(); FileOutputStream fo = new FileOutputStream(fil); int count = 0; byte[] buf = new byte[16384]; while ((count=fr.read(buf)) != -1) { fo.write(buf, 0, count); } fr.close(); fo.close();

takataka111
質問者

補足

以下のソースのように修正したところ、出来上がったファイル の画像データの先頭に →「ャ・z  GIF89ax」がついてしまって その部分だけが2つのファイルで異なっている点です。 しかしその部分を削除して保存しても画像は表示されません。 FileInputStream fr = new FileInputStream(filePath); BufferedInputStream in = new BufferedInputStream (fr); //読み込んだ画像ファイルデータをファイルに書き込む File fil = new File("c:\\image\\aoki.gif"); fil.createNewFile(); FileOutputStream fo = new FileOutputStream(fil); BufferedOutputStream bw = new BufferedOutputStream(new ObjectOutputStream(fo)); int count = 0; byte[] buf = new byte[16384]; while ((count=in.read(buf)) != -1) { bw.write(buf, 0, count); } in.close(); bw.close(); fo.close(); 何がいけないんでしょうか。。。

関連するQ&A