IO流

来源:互联网 发布:电脑绘图软件sai 编辑:程序博客网 时间:2024/05/16 09:51

IO流就是InputStream和OutputStream

这两个是字节流的顶级父类

相对与程序框来说,InputStream就是往程序输入数据,OutputStream就是输出数据

这里的输入输出是相对程序来说的

InputStream的常用方法                                         OutputStream的常用方法

    int read()                                                                                       void write(int b)  

                         从输入流读取一个8位的字节,把它转换成0~255之间                                    向输出流写入一个字节(自动将b转换成二进制的类型数据)  

                               的整数,并返回。                                                                   

    int read(byte[] b)                                                                                                    void write(byte[] b)       

                               从输入流读取若干字节,把他们保存到参数b指定                                         将参数b指定的字节数组的所有字节写到输出流

                               的字节数组中,返回的整数代表读取字节数。

       int read(byte [] b,int off,int len)                                                                        void write(byte[] b,int off,int len)

                               从输入流读取若干字节,保存到数组b,off表示数组中                                   将指定byte数组中从偏移量off开始的len个字节写入输出流

                               开始保存数据的索引,len表示读取的字节数

       void close( )                                                                                                            void flush()

                               关闭输入流,并释放与该流关联的所有系统资源                                              刷新此输入流并强制写出所有缓冲的输出字节

                                                                                                                                    void close()

                                                                                                                                                  关闭此输出流并释放与此流相关的所有系统资源

-------------------------------------------------------------------------------------------------------------------

       用字节流读取文件

              FileInputStream是InputStream的之类,它是操作文件的字节输入流

                     接下来的代码要现在当前目录下创建一个文本文件test.txt,并在里面写下”itcast“

       

import java.io.*;public class 字节流读写文件 {  public static void main(String[] args) throws Exception{FileInputStream in = new FileInputStream("test.txt");int b = 0;while(true){b = in.read();if(b == -1)break;System.out.println(b);} in.close();  } }
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  用字节流写文件

     FileOutStream是相对FileOutStream的子类,它是操作文件的字节输出流,专门把用于数据写入文件

      

import java.io.*;public class 写入数据 {   public static void main(String[] args)throws Exception {FileOutputStream out = new FileOutputStream("test.txt");//FileOutStream的构造函数FileOutStream(String fileName,boolean append)如果将String str = "我的文件";                                  //参数boolean设置为true,则会在已存在的文件中追加内容byte[] b=str.getBytes();for(int i = 0 ;i < b.length; i++){out.write(b[i]);}out.close();}   }

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  IO流会产生异常,所以要用throws将异常抛出,然而一旦遇到异常,close()方法将无法执行,流对象所占用的资源将得不到释放,为此,通常将关闭流的代码写在finally代码块中

finally{   try{      if(in!=null)  //如果in不为空,关闭输入流        in.close()  }catch (Exception e){      e.printStackTrace();  }   try{      if(out!=null)          //如果out不为空,关闭输出流        out.close();   }catch (Exception e){      e.printStackTrace();      }}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  文件的拷贝

  

<span style="font-size:14px;">public class 文件的拷贝 {  public static void main(String[] args)throws Exception {InputStream in =new FileInputStream("source\\Beyond.mp3");  //创建一个字节输入流,用于读取当前目录下的source文件中的mp3文件OutputStream out =new FileOutputStream("target\\Beyond.mp3");   //创建一个字节输出流,用于将读取的数据写入target目录下的文件中int len;             //定义一个int类型的变量len,记住每次读取的一个字节。long begintime = System.currentTimeMillis();    //当前系统时间while((len = in.read()) != -1){                   //读取一个字节并判断是否读到文件末尾out.write(len);                               //将读取到的字节写入文件}long endtime=System.currentTimeMillis();             //获取拷贝结束时的系统时间System.out.println("拷贝文件所消耗的时间是:"+(endtime-begintime)+"毫秒");in.close();out.close();}}</span>
   上面的代码是一个字节一个字节的读取,效率不高,可以定义一个字节数组作为缓冲区,一次性读取多个字节的数据,并保存在数组里,然后将字节数组中的数据一次性写入文件。

 

public class 文件的拷贝 {  public static void main(String[] args)throws Exception {InputStream in =new FileInputStream("source\\Beyond.mp3");  //创建一个字节输入流,用于读取当前目录下的source文件中的mp3文件OutputStream out =new FileOutputStream("target\\Beyond.mp3");   //创建一个字节输出流,用于将读取的数据写入target目录下的文件中byte[] buff = new byte[1024];     //定义一个缓冲区,用来读写文件int len;             //定义一个int类型的变量len,记住每次读取的一个字节。long begintime = System.currentTimeMillis();    //当前系统时间while((len = in.read(buff)) != -1){                   //读取一个字节并判断是否读到文件末尾out.write(buff,0,len);                               //将读取到的字节写入文件}long endtime=System.currentTimeMillis();             //获取拷贝结束时的系统时间System.out.println("拷贝文件所消耗的时间是:"+(endtime-begintime)+"毫秒");in.close();out.close();}}


0 0
原创粉丝点击