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('\n'); // 取数据
            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) ;    // 保存内容
        }

 

 
posted @ 2017-01-13 23:00  liouwei4083  阅读(188)  评论(0编辑  收藏  举报