java中输入流和输出流

 输入流InputStream和输出流OutStream是抽象方法,不能被实例化,它们还有很多子类
 输入流InputStream的常用方法
 int read()从输入流读取一个八位的字符,把它转换为0~255之间的整数,并返回这一整数
 int read(byte【】 b) 从输入流读取若干字节,把他们保存到参数b自定的字节数组中,返回的整数表示读取字节数
 int read(byte【】b,int off,int len) 从输入流读取若干字节,把他们保存到参数b自定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目
 void close() 关闭输入流并释放与该流关联的所有系统资源
 输出流OutStream的常用方法
 void write(int b)向输入流写入一个字节
 viod write(byte【】b)把参数b指定的字节数组的所有字节写到输出流
 void write(btye【】b,int off,int len)将指定byte数组中从偏移量off开始的len个字节写入输出流
 void fush() 刷新此输出流并强制写出所有缓冲的输出字节   
 viod colse()




 FileInputStream和FileOutputStream针对文件的读写
 FileInputStream是InputStream的子类
 在test.txt文件中输入itcast
 import java.io.*;
 public class Example{
  public static void public static void main(String[] args)throws Exception{
    //创建一个文件字节输入流
    FileInputStream in =new FileInputStream("test.text");
    int b=0;   //记住每次读取的一个字节
    while(true){
      b=in.read();
      if(b==-1){
  break;
}
System.out.println(b);
    }
    in.colse();


  }
 }
 因为itcast各占一个字节,因此最终显示的就是文件test.txt中的六个字节所对应的十进制数


 与FileInputStream对应的是FileOutputStream(文件输出流)
 import java.io.*;
 public class Example{
  public void public static void main(String[] args) throws Exception{
  //创建一个文件字节输出流
  FileOutputStream out=new FileOutputStream("Example.txt);
String str="测”;
byte []b=str.getBytes();
for(int i=0;i<b.length;i++){
  out.write(b[i]);
}
out.close();//如果像一个已经存在的文件写入数据,那么该文件的数据首先被清空,若希望增加新的内容,则可以使用构造函数FileOutputStream(String fileName,booelan append)来创建文件输出流对象,并将append的参数设为true;


    
  }
 }


 最后通常将关闭流的操作写在finally{}代码块中
 finally{
 try{
 if(in!=null){
  in.close();
 }catch(Exception e){
  e.printStackTrace();
}


try{
  if(out!=null){
    out.colse()
  }catch(Exception e){
  e.printStackTrace();
}
}
 }
 }




 文件的拷贝
 首先在当前目录下创建文件夹source和target,然后再source文件夹下放一个“天下。MP3”的文件
 import java.io.*;
 public class Example{
  public static void public static void main(String[] args) throws Exception{
  //创建一个字节输入流,用于读取当前目录下sourc文件夹中的MP3文件
  InputStream in=new FileInputStream("source\天下.mp3");
  //创建一个文件字节输出流,用于将读取的字节写入target目录下的文件中
  outputStream  out=new FileInputStream("target\天下.mp3");

  int len;//记住每次读取的一个字节

 Long begintime=System.currentTimeMillis();//获取拷贝文件前的系统时间
    while((len=in.read())!=-1){
      out.write(len);
    }
    Long endtime=System.currentTimeMillis();//获取文件拷贝结束时系统时间
    System.out.println("拷贝文件消耗的时间是"+endtime-begintime);
    in.colse();
    out.colse();

    
  }

 }



以上是单个字节的读取,在拷贝文件时,可以一次性读取多个字节的数据,并保存在字节数组中,然后将字节数组中的数据一次性写入文件。
  import java.io.*;
 public class Example{
  public static void public static void main(String[] args) throws Exception{
  //创建一个字节输入流,用于读取当前目录下sourc文件夹中的MP3文件
  InputStream in=new FileInputStream("source\天下.mp3");
  //创建一个文件字节输出流,用于将读取的字节写入target目录下的文件中
  outputStream  out=new FileInputStream("target\天下.mp3");
//以下是用缓冲区读写文件
  byte[] butt=new byte[1024];//定义一个字节数组,作为缓冲区
    int len;//记住读取读入缓冲区的字节数
    Long begintime=System.currentTimeMillis();//获取拷贝文件前的系统时间
    while((len=in.read(buff))!=-1){//判断是否读到文件末尾
      out.write(buff,0,len);//从第一个字节开始,向文件写入len个字节
    }
    Long endtime=System.currentTimeMillis();//获取文件拷贝结束时系统时间
    System.out.println("拷贝文件消耗的时间是"+endtime-begintime);
    in.colse();
    out.colse();
  }
 }


 字节缓冲流
 在IO包中提供两个带缓冲的字节流,BufferedInputStream和BufferdOutputStream
  import java.io.*;
 public class Example{
  public static void public static void main(String[] args) throws Exception{
  //创建一个带缓冲去的输入流
  BufferedInputStream bis=new BufferedInputStream( new FileInputStream("source\天下.mp3"));


  //创建一个带缓冲区的输出流
  BufferdOutputStream  bos=new BufferdOutputStream(new FileInputStream("target\天下.mp3"));
  int len;//记住每次读取的一个字节
    Long begintime=System.currentTimeMillis();//获取拷贝文件前的系统时间
    while((len=bis.read())!=-1){
      bos.write(len);
    }
    Long endtime=System.currentTimeMillis();//获取文件拷贝结束时系统时间
    System.out.println("拷贝文件消耗的时间是"+endtime-begintime);
    in.colse();
    out.colse();
  }
 }


 这两个流内部都定义了一个大小为8192的字节数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值