• java io 学习


         1,io 体系

    在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了。
         Java.io包中定义了多个流类型类实现输入输出的功能,从不同的角度可以分为:
      ~按照数据流方向的不同可以分为输入流输出流
      ~按照按照数据处理单位的不同可以分为字节流字符流
    如下几张图可以直观的描述io体系中的大部分类和关系.根据类名称就可以知道这个类大体是操作什么的.

     
     
     
     

    ,2,一个简单的文件复制实例

                File f1 = new File(args[0]); // 源文件的File对象
                File f2 = new File(args[1]); // 目标文件的File对象
                InputStream input = null; // 准备好输入流对象,读取源文件
                OutputStream out = null; // 准备好输出流对象,写入目标文件
                input = new FileInputStream(f1);
                out = new FileOutputStream(f2);
                int temp = 0;
                while ((temp = input.read()) != -1) { // 开始拷贝
                    out.write(temp); // 边读边写
                }
                input.close(); // 关闭
                out.close(); // 关闭
     

         3,其他相关类

         System类对io的支持
         system.out其实就是一个打印流printstream,输出对象就是控制台,system.err也一样是printstream,两个其实没有区别,只是逻辑上err来处理错误的信息而已
         system.in其实就是一个inputstream,输入的源是键盘等设备而已,在程序中直接用来当做inputstream来获取数据即可,在等待获取数据的时候,线程阻塞等待.
         并且system类也提供了setout setin的方法,可以让用户自己定义数据的来源和去处.不过一般上也不去修改这个东西.
            InputStream input = System.in ;    // 从键盘接收数据
            byte b[] = new byte[5] ;    // 开辟空间,接收数据
            System.out.print("请输入内容:") ;    // 提示信息
            int len = input.read(b) ;    // 接收数据
            System.out.println("输入的内容为:" + new String(b,0,len)) ;
            input.close() ;    // 关闭输入流
     
    bufferdreader类,用于从缓冲区中读取内容,先把从inputstream中读取到的字节数据放入到缓冲区然后在读出来.他的构造方法只能够接受字符输入流的实例,因此需要先用inputstreamreader将inputstream转换成reader后,使用,这里其实就体现了javaio体系中使用的一种设计模式,装饰模式( 在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。)
            BufferedReader buf = null ;        // 声明对象
            buf = new BufferedReader(new InputStreamReader(System.in)) ;    // 将字节流变为字符流
            String str = null ;    // 接收输入内容
            System.out.print("请输入内容:") ;
            try{
                str = buf.readLine() ;    // 读取一行数据
            }catch(IOException e){
                e.printStackTrace() ;    // 输出信息
            }
            System.out.println("输入的内容为:" + str) ;

     
     
    scanner类,是java提供的专门方便使用 的输入数据类,还可以方便的对输入的数据进行验证,他的构造方法支持一个file参数或者一个inputstream参数,使用的时候,直接使用next系列方法,即可获得流中对应的数据.
            File f = new File("D:" + File.separator + "test.txt"); // 指定操作文件
            Scanner scan = null;
            scan = new Scanner(f); // 从键盘接收数据
            StringBuffer str = new StringBuffer();
            while (scan.hasNext()) {
                str.append(scan.next()).append('
    '); // 取数据
                System.out.println("文件内容为:" + str);
            }
     
    SequenceInputStream合并流,主要是讲两个文件内容合并一个.
            InputStream is1 = null ;        // 输入流1
            InputStream is2 = null ;        // 输入流1
            OutputStream os = null ;        // 输出流
            SequenceInputStream sis = null ;    // 合并流
            is1 = new FileInputStream("d:" + File.separator + "a.txt") ;
            is2 = new FileInputStream("d:" + File.separator + "b.txt") ;
            os = new FileOutputStream("d:" + File.separator + "ab.txt") ;
            sis = new SequenceInputStream(is1,is2) ;    // 实例化合并流
            int temp = 0 ;    // 接收内容
            while((temp=sis.read())!=-1){    // 循环输出
                os.write(temp) ;    // 保存内容
            }
     
  • 相关阅读:
    search for a range
    search in rotated sorted array
    MSDN--Windows Server
    Windows Server 2016- Windows Server 2016 上 HYPER-V 中的新增功能
    Azure 媒体服务产品简介
    EMC Avamar Virtual Edition 7.1.1 for Microsoft Azure and Hyper-V Released
    漫游用户配置文件 -文件夹重定向
    How to Install office 365 Plus without ODT
    Azure IoT
    AD FS deployment in Azure
  • 原文地址:https://www.cnblogs.com/liouwei4083/p/6284353.html
Copyright © 2020-2023  润新知