Java拷贝图片文件出现错误-原始数据格式无法识别

买房动力十足 2011-11-25 10:42:48
public class ImageCopy {

/**
* @param args
*/
public static void main(String[] args) {
FileInputStream fio =null;
FileOutputStream fos = null;
try {
fio = new FileInputStream("e:\\s.jpg");
fos = new FileOutputStream("d:\\w.jpg");
byte temp[] = new byte[1024];//缓存
//循环读取
int n=0;//记录实际读取到的字节数,实际读取了几个字节
while((n=fio.read())!=-1){
//输出到指定文件

fos.write(temp);
}
} catch (FileNotFoundException e) {

e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
try {
fio.close();
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}

}

输出的这个 w.jpg 有10.8 MB 而原始文件s.jpg 是10.8KB
而且用acdsee打开的时候,图片是啥都没有的,“ 原始数据格式无法识别”。
...全文
614 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dntg007 2011-11-25
  • 打赏
  • 举报
回复
fio.read()是只读一个字节,每读一个后,你写了1024个字节(temp).肯定文件会大,而且temp中根本就没有原文件的数据。使用n=fio.read(temp)会将源文件的数据流放到temp中,但是要注意不一定放满,比如源文件只有500个字节,你执行fos.write(temp)时还是写出1024个字节。这个时候n(实际读取的字节数)就有用了。使用fos.write(temp, n);不知道有没有这个方法,应该有吧。作用就是只写temp中的前n个字节。整体流程就是读数据到temp中,并知道具体读了多少个字节,然后将temp写到输出文件中,也要指定写多少个字节。
WJL_MGQS 2011-11-25
  • 打赏
  • 举报
回复
while((n=fio.read())!=-1)改成while((n=fio.read(temp))!=-1)每次读出来的东西要放进去哈!
买房动力十足 2011-11-25
  • 打赏
  • 举报
回复
谢了哈,搞定了

while((n=fio.read(temp))!=-1){
//输出到指定文件

//fos.write(temp);
fos.write(temp, 0, n);
}

换成这个OK

[Quote=引用 2 楼 dntg007 的回复:]
fio.read()是只读一个字节,每读一个后,你写了1024个字节(temp).肯定文件会大,而且temp中根本就没有原文件的数据。使用n=fio.read(temp)会将源文件的数据流放到temp中,但是要注意不一定放满,比如源文件只有500个字节,你执行fos.write(temp)时还是写出1024个字节。这个时候n(实际读取的字节数)就有用了。使用fos.write(temp, n);不……
[/Quote]
买房动力十足 2011-11-25
  • 打赏
  • 举报
回复
恩,谢谢,确实是这样的,[Quote=引用 1 楼 wjl_mgqs 的回复:]
while((n=fio.read())!=-1)改成while((n=fio.read(temp))!=-1)每次读出来的东西要放进去哈!
[/Quote]

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧