- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javaで画像ファイルの入出力方法)
Javaで画像ファイルの入出力方法
このQ&Aのポイント
- Javaアプリケーションで画像ファイルの入出力方法を探しています。画像データをバイナリとして取得し、別のディレクトリに同じ画像を複製する方法を知りたいです。
- 現在、FileInputStreamやFileOutputStreamを使用して画像ファイルのコピーを試みていますが、データの差異があり、画像が正しく表示されません。
- 以下のソースコードを使用して画像ファイルのデータを読み込み、新しいファイルに書き込んでいます。しかし、うまくいっていません。良い方法があれば教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
画像ファイルにReader、Writerのクラスを使用してはいけません。 このクラスはデータをテキスト形式で処理します。なので画像ファイル の場合はバイナリ形式のまま処理するStream系のクラスを使いましょう。 ということでたぶん FileReader → FileInputStream BufferedReader → BufferedInputStream BufferedWriter → BufferedOutputStream OutputStreamWriter → ObjectInputStream になるのではないかと。 参考URLはクラスの意味をわかりやすく説明しているので参考にして下さい。
お礼
以下の方法で成功しました、ありがとうございました。 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();
補足
以下のソースのように修正したところ、出来上がったファイル の画像データの先頭に →「ャ・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(); 何がいけないんでしょうか。。。