黑马程序员__java之IO流

来源:互联网 发布:linux网桥作用 编辑:程序博客网 时间:2024/06/05 17:21

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

  •    IOl流的概述及其分类

     1.概念
   * IO流用来处理设备之间的数据传输(局域网或者是互联网)  * Java对数据的操作是通过流的方式
    * Java用于操作流的类都在IO包中
    * 流按流向分为两种:输入流,输出流。
    * 流按操作类型分为两种:
        * 字节流 : 字节流可以操作任何数据,因为在计算机中任何数据都是以字节的形式存储的
        * 字符流 : 字符流只能操作纯字符数据,比较方便。
2.IO流常用父类
    * 字节流的抽象父类:(不能创建对象)
        * InputStream ()
        * OutputStream()
    * 字符流的抽象父类:
        * Reader 
        * Writer        
3.IO程序书写
    * 使用前,导入IO包中的类
    * 使用时,进行IO异常处理 --> (IO流操作的是硬盘与内存的关系)
    * 使用后,释放资源----->(举例:这就要关闭管道)

     IO流的拷贝拷贝图片的几种代码实现:

 FileInputStream读取
FileOutputStream写出
1.
        FileInputStream fis = new FileInputStream("致青春.mp3");    //创建输入流对象,关联致青春.mp3
        FileOutputStream fos = new FileOutputStream("copy.mp3");//创建输出流对象,关联copy.mp3
        
        int b;
        while((b = fis.read()) != -1) {
            fos.write(b);
        }
        
        fis.close();
        fos.close();


 2.字节流一次读写一个字节数组复制图片和视频
        FileInputStream fis = new FileInputStream("致青春.mp3");
        FileOutputStream fos = new FileOutputStream("copy.mp3");
        int len;
        byte[] arr = new byte[1024 * 8];                    //自定义字节数组
        
        while((len = fis.read(arr)) != -1) {
            //fos.write(arr);
            fos.write(arr, 0, len);                            //写出字节数组写出有效个字节个数
        }
        
        fis.close();
        fos.close();

3.高效缓冲流

FileInputStream fis = new FileInputStream("致青春.mp3");            //创建文件输入流对象,关联致青春.mp3
        BufferedInputStream bis = new BufferedInputStream(fis);            //创建缓冲区对fis装饰
        FileOutputStream fos = new FileOutputStream("copy.mp3");        //创建输出流对象,关联copy.mp3
        BufferedOutputStream bos = new BufferedOutputStream(fos);        //创建缓冲区对fos装饰
        
        int b;
        while((b = bis.read()) != -1) {        
            bos.write(b);
        }
        
        bis.close();                        //只关装饰后的对象即可
        bos.close();

 IO流 注意事项: 字节流读取中文的问题
    * 字节流在读中文的时候有可能会读到半个中文,造成乱码 
字节流写出中文的问题
    * 字节流直接操作的字节,所以写出中文必须将字符串转换成字节数组 
    * 写出回车换行 write("\r\n".getBytes());

4.为了解决读取字符时候出现乱码可以使用字符流:

                        * 字符流是可以直接读写字符的IO流
                       * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出.  

字符流使用说明: *字符流也可以拷贝文本文件, 但不推荐使用. 因为读取时会把字节转为字符, 写出时还要把字符转回字节.
                         * 程序需要读取一段文本, 或者需要写出一段文本的时候可以使用字符流
                        * 读取的时候是按照字符的大小读取的,不会出现半个中文
                        * 写出的时候可以直接将字符串写出,不用转换为字节数组

5.字符流的拷贝代码如下:

FileReader fr = new FileReader("a.txt");
    FileWriter fw = new FileWriter("b.txt");
    
    int ch;
    while((ch = fr.read()) != -1) {
        fw.write(ch);
    }
    
    fr.close();
    fw.close();

6.读取文本一行字符

 BufferedReader的readLine()方法可以读取一行字符(不包含换行符号)
BufferedWriter的newLine()可以输出一个跨平台的换行符号"\r\n"

        BufferedReader br = new BufferedReader(new FileReader("aaa.txt"));
        BufferedWriter bw = new BufferedWriter(new FileWriter("bbb.txt"));
        String line;
        while((line = br.readLine()) != null) {
            bw.write(line);
            //bw.write("\r\n");                    //只支持windows系统
            bw.newLine();                        //跨平台的
        }
        
        br.close();
        bw.close(); 






  

0 0