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) ;    // 保存内容
        }
相关文章
相关标签/搜索