JavaIO流1
JavaIO流1
处理设备之间的数据传输,如:读/写文件,网络通讯等
Java中,对于数据的输入/输出操作以"流(stream)"的方式进行
IO流原理(我们站程序的一方)
- 输入input:读取外部数据到程序(内存)中
- 输出output:将程序数据输出到磁盘等设备
流的分类
- 按操作数据单位的不同:字节流(8 bit)(图片,视频)、字符流(16 bit)(文本)
- 按数据流的流向不同:输入流、输出流
- 按流的角色不同:节点流(直接作用在文件上)、处理流
IO流的体系结构

- 对于文本文件(txt,.java,.c,.cpp):字符流
- 对于非文本文件(.jpg,.mp3,.mp4,.avi,.doc...):字节流
抽象基类                  节点流(文件流)               缓冲流(处理流的一种)
InputStream              FileInputStream             BufferedInputStream
OutputStream             FileOutputStream            BufferedOutputStream
Reader                   FileReader                  BufferedReader
Writer                   FileWriter                  BufferedWriter
FileReader FileWriter的使用
- 创建File类的对象
- 创建流的对象
- 数据的读入与写出
- 关闭流
FileReader
     public static void text1()  {
         //将src下的hell文件读入程序,并输出到控制台
         /*
         * 1.read()的理解:回读入的一个字符。如果到文件末尾,返回-1
         * 2. 异常的处理:为保证流资源一定可以执行关闭,使用try-catch-finaLL(选中所选内容Ctrl+Alt+t)
         * 3.读入的文件一定要存在
         * */
         FileReader fr = null;
         try {
             //1.实例化File对象,指明操作的文件
             File file = new File("src\\hello");//相较于当前Module
             //2.提供具体的流:FileReader
             fr = new FileReader(file);
             //3.数据的读入
             int date = fr.read();
             while (date != -1) {
                 System.out.print((char) date);
                 date = fr.read();
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
         }
         //4.流的关闭
         try {
             if (fr != null)//如果没有实例化
                 fr.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
         System.out.println();
     }
     //对read()方法的升级:使用read的重载方法
     public static void text2()  {
         FileReader fr = null;
         try {
             //1.File类的实例化
             File file = new File("src\\hello");
             //2.FileReader流的实例化
             fr = new FileReader(file);
             //3.读入操作
             /*  read(数组):每次读入数组中的资格个数。如果到文件末尾,返回-1  */
             char[] cbuf =new char[5];
             int len = fr.read(cbuf);//实际放入的个数(有几个,就是几)
             while(len != -1) {
                 //方式一
     //            for (int i = 0; i < len; i++) {
     //                System.out.print(cbuf[i]);
     //            }
                 //方式2
                 String str = new String(cbuf,0,len );
                 System.out.print(str);
                 len = fr.read(cbuf);
             }
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
         }
         //4.资源(流)的关闭
         try {
             if(fr != null)
                 fr.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
         System.out.println();
     }
输出hello文件的"helloworld"
FileWriter
//FileWriter
     public static void text3(){
         //从内存中写出数据到硬盘文件里
         /**
          * 说明:
          *   输出操作:file可以不存在,系统自动创建
          *            file存在,FileWriter(file,false)或是FileWriter(file):覆盖原文件 ;
          *                    FileWriter(file,true):在原文件基础上添加
          */FileWriter fw = null;
         try {
             //1.提供file的对象,指明写出到的文件
             File file = new File("src\\hello1");
             //2.提供FileWriter的对象,用于数据写出
             fw = new FileWriter(file);
             //3.写出操作
             fw.write("I have a dream\n");
             fw.write("I do not have a dream");
         } catch (IOException e) {
             e.printStackTrace();
         } finally {
         }
         //4.流的关闭
         try {
             if (fw != null)
                 fw.close();
         } catch (IOException e) {
             e.printStackTrace();
         }
     }
再hello1文件中写出I have a dream(换行)I do not have a dream
文本文件的复制
//文本文件的复制
    public static void text4() {
        //读进来,再写出去
        FileReader fr = null;
        FileWriter fw = null;
        try {
            //1.创建File类的对象,读入与写出
            File comrfile = new File("src\\hello");
            File gofile = new File("src\\hello2");
            //2.创建流的对象,输入与输出
            fr = new FileReader(comrfile);
            fw = new FileWriter(gofile);
            //3.数据的读入与写出
            char[] arr = new char[5];
            int len = fr.read(arr);
            while(len != -1){
                for (int i = 0; i < len; i++) {
                    fw.write(arr[i]);
                }
                len = fr.read(arr);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
        //4.关闭资源流
        try {
            if(fw != null)
                fw.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if(fr != null)
                fr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
hello文件中的"helloworld"复制到hello2中
FileInputStream FileOutputStream的使用
与FileReader FileWriter操作类似
//指定的文件
public void copy(String srcPath,String destPath){//两个形参
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            File comefile = new File(srcPath);
            File gofile = new File(destPath);
            fis = new FileInputStream(comefile);
            fos = new FileOutputStream(gofile);
            byte[] buffer = new byte[1024];
            int len = fis.read(buffer);
            while (len != -1) {
                fos.write(buffer,0,len);
                len = fis.read(buffer);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
        }
    
        try {
            if(fos != null)
                fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        try {
            if(fis != null)
                fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
                    
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号