1,io 体系

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

 

java  io 学习

java  io 学习

java  io 学习

java  io 学习

java  io 学习

 

 
 
 
 
java  io 学习
java  io 学习
java  io 学习
java  io 学习
java  io 学习
java  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) ;

java  io 学习

 

java  io 学习
 
 
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) ;    // 保存内容
        }

 

 

相关文章:

  • 2022-03-07
  • 2021-07-27
  • 2022-12-23
  • 2021-05-30
  • 2021-09-22
  • 2021-12-04
猜你喜欢
  • 2021-07-07
  • 2022-12-23
  • 2020-05-18
  • 2021-11-04
  • 2021-09-10
  • 2021-07-05
相关资源
相似解决方案