复制一个文件
思路
1:用字节读取流对象与图片关联
2:与字节写入流创建图片文件,用于储存获取到的图片数据
3:通过循环读写,完成数据储存
自定义缓冲区定义一个读一行的字节流缓冲区进而理解bufferinputstream的意义所在
思路
1:用字节读取流对象与图片关联
2:与字节写入流创建图片文件,用于储存获取到的图片数据
3:通过循环读写,完成数据储存
4:关闭资源
public class IO2copypic {
public static void main(String[] args)
{
FileOutputStream fos=null;
FileInputStream fis=null;
try{
fos=new FileOutputStream("E:\\3.jpg");
fis=new FileInputStream("E:\\1.jpg");
byte[] but=new byte[1024];
int len=0;
while((len=fis.read(but))!=-1){
fos.write(but, 0, len);
}
}
catch(IOException e){
throw new RuntimeException("复制文件错误");
}
finally
{
try{
if(fis!=null)
fis.close();
}
catch(IOException e){
throw new RuntimeException("读取关闭错误");
}
try{
if(fos!=null)
fos.close();
}
catch(IOException e1){
throw new RuntimeException("写入关闭错误");
}
}
}
自定义缓冲区定义一个读一行的字节流缓冲区进而理解bufferinputstream的意义所在
class MyBufferedinputstreame{
private InputStream in;
private byte[] buf=new byte[1024];
private int count=0,pos=0;//用count来记录还有多少个数组未被读,用pos来记录数组的下标
MyBufferedinputstreame(InputStream in)
{
this.in=in;
}
//一次读一个字节,从缓冲区(字节数组)获取
public int myRead()throws IOException
{
//通过in对象读取硬盘上的数据,并储存buf中
if(count==0)
{
count=in.read(buf);
if(count<0)
return -1;
pos=0;
count--;
pos++;
byte b = buf[pos];
return b&0xff;
}
else if(count>0)
{
byte b = buf[pos];
count--;
pos++;
return b&0xff;
}
return -1;
}
public void close()throws IOException
{
in.close();
}
}
public class IO2copypic
{
public static void main(String[] args)throws IOException
{
MyBufferedinputstreame bif = new MyBufferedinputstreame(new FileInputStream("E:\\1.jpg"));
BufferedOutputStream bof = new BufferedOutputStream(new FileOutputStream("E:\\7.jpg"));
int by=0;
while((by=bif.myRead())!=-1)//一组一组的读
{
bof.write(by);
}
bif.close();
bof.close();
}
}