黑马程序员技术交流社区
标题:
复制图片问题
[打印本页]
作者:
郑小杰
时间:
2012-7-20 13:25
标题:
复制图片问题
/*
复制一个图片
思路:
1,用字节读取流对象和图片关联
2,用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3,通过循环读写,完成数据的存储
4,关闭资源
*/
import java.io.*;
class CopyPic
{
public static void main(String[] args)
{
FileOutputStream fos = null;
FileInputStream fis = null;
try
{
fos = new FileOutputStream("c:\\2.jpg");
fis = new FileInputStream("c:\\1.jpg");
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read())!=-1)
{
fos.write(buf,0,len);
}
}
catch (IOException e)
{
throw new RuntimeException("复制文件失败");
}
finally
{
try
{
if(fos!=null)
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败");
}
try
{
if(fis!=null)
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("读取关闭失败");
}
}
}
}
上边的代码可以实现复制,但是复制出来的图片打不开,怎么回事?还有就是原来的图片只有20.1k ,为什么复制出的有2.36M ?试了几次都这样
作者:
周玉龙
时间:
2012-7-20 13:38
/*
复制一个图片
思路:
1,用字节读取流对象和图片关联
2,用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3,通过循环读写,完成数据的存储
4,关闭资源
*/
import java.io.*;
class CopyPic
{
public static void main(String[] args)
{
FileOutputStream fos = null;
FileInputStream fis = null;
try
{
fos = new FileOutputStream("c:\\2.jpg");
fis = new FileInputStream("c:\\1.jpg");
byte[] buf = new byte[1024];
int len = 0;
while((len=fis.read(buf))!=-1)//哥们 这里注意了.你这里没写buf.没写buf就是一个字节一个字节的读取.读一个字节判断一次,是不是=-1不是就把1M的数组(没有内容的数组)写进去了.
//所以你复制的文件打开不是图片,而且比原来的大
//哥们你可害苦了我,你的目标文件小,一个字节一个字节的判断.很快就结束了,我的可是3M的图片这一个字节一个字节的判断,电脑风扇立马就嘎嘎的响起来了
{
fos.write(buf,0,len);
}
}
catch (IOException e)
{
throw new RuntimeException("复制文件失败");
}
finally
{
try
{
if(fos!=null)
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败");
}
try
{
if(fis!=null)
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("读取关闭失败");
}
}
}
}
作者:
程潇
时间:
2012-7-20 13:50
import java.io.*;
class CopyPic
{
public static void main(String[] args)
{
FileOutputStream fos = null;
FileInputStream fis = null;
try
{
fos = new FileOutputStream("c:\\2.jpg");
fis = new FileInputStream("c:\\1.jpg");
byte[] buf = new byte[1024];
int len = 0;
while((
len=fis.read()
)!=-1) //
这句有问题,fis.read()是读一个字节,返回的是下一个字节的数据,而不是读入到流中的字节数,你将下一个字节的数据赋给了len,下面的写入操作一定会出问题。
//
另外,正确的操作应该是len=fis.read(buf)
{
fos.write(buf,0,
len
); //
由于上面的原因,写入的数据是从0到len的数据,上面取到的len所以你的图片会是2M多
}
}
catch (IOException e)
{
throw new RuntimeException("复制文件失败");
}
finally
{
try
{
if(fos!=null)
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("写入关闭失败");
}
try
{
if(fis!=null)
fos.close();
}
catch (IOException e)
{
throw new RuntimeException("读取关闭失败");
}
}
}
}
作者:
郑小杰
时间:
2012-7-20 14:52
周玉龙 发表于 2012-7-20 13:38
/*
复制一个图片
思路:
原来如此啊,谢了,哥们电脑没问题吧?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2