アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります、

画像ファイル(データ)をJavaアプリケーションで取り込んで別のディレクトリに同じ画像を複製する方法を探しています。

単なる画像ファイルのコピーではなく、Java側で画像データ(バイナリ)を取得して、新規に作成したファイル(Fileクラスで作成)にそのデータをWriteして複製する方法を探しています。

FileInputStreamやFileOutputStream等の方法で行ってみたのですが、微妙にデータが異なってしまって、画像が表示されません(画像ファイルを秀丸等で表示してデータを比較しました)。

以下にソースを貼り付けます。何か良い方法等ありましたらよろしくお願いします。

//画像ファイルのデータを読み込む
CharArrayWriter caw = new CharArrayWriter();
Reader fr = new FileReader("D:\\image\\abcd.gif");
Reader in = new BufferedReader(fr);

//新規にファイルを作成する
File fil = new File("C:\\image\\abcd.gif");
fil.createNewFile();

FileOutputStream fo = new FileOutputStream(fil);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(fo));
int count = 0;
char[] buf = new char[16384];
while ((count=in.read(buf)) != -1) {
if (count > 0) caw.write(buf, 0, count);
}
in.close();

//読み込んだ画像ファイルデータを作成したファイルに書き込む
bw.write(caw.toCharArray());

よろしくお願いします。

A 回答 (1件)

画像ファイルにReader、Writerのクラスを使用してはいけません。


このクラスはデータをテキスト形式で処理します。なので画像ファイル
の場合はバイナリ形式のまま処理するStream系のクラスを使いましょう。
ということでたぶん
FileReader → FileInputStream
BufferedReader → BufferedInputStream
BufferedWriter → BufferedOutputStream
OutputStreamWriter → ObjectInputStream
になるのではないかと。

参考URLはクラスの意味をわかりやすく説明しているので参考にして下さい。

参考URL:http://java-house.jp/ml/archive/j-h-b/017380.htm …

この回答への補足

以下のソースのように修正したところ、出来上がったファイル
の画像データの先頭に
→「ャ・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();

何がいけないんでしょうか。。。

補足日時:2002/08/29 16:04
    • good
    • 0
この回答へのお礼

以下の方法で成功しました、ありがとうございました。
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();

お礼日時:2002/08/29 16:28

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