`
ybhuxiao
  • 浏览: 193343 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAVA 中的IO流

    博客分类:
  • java
阅读更多
一、流的概念
       流(stream)的概念源于UNIX中管道(pipe)的概念。在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备、外部文件等。
       一个流,必有源端和目的端,它们可以是计算机内存的某些区域,也可以是磁盘文件,甚至可以是Internet上的某个URL。
        流的方向是重要的,根据流的方向,流可分为两类:输入流和输出流。用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往输入流写,而不能读它。
       实际上,流的源端和目的端可简单地看成是字节的生产者和消费者,对输入流,可不必关心它的源端是什么,只要简单地从流中读数据,而对输出流,也可不知道它的目的端,只是简单地往流中写数据。 
       形象的比喻——水流 ,文件======程序 ,文件和程序之间连接一个管道,水流就在之间形成了,自然也就出现了方向:可以流进,也可以流出.便于理解,这么定义流: 流就是一个管道里面有流水,这个管道连接了文件和程序。
二、流的分类
  1. java.io包中的类对应两类流,一类流直接从指定的位置(如磁盘文件或内存区域)读或写,这类流称为结点流(node stream),其它的流则称为过滤器(filters)。过滤器输入流往往是以其它输入流作为它的输入源,经过过滤或处理后再以新的输入流的形式提供给用户,过滤器输出流的原理也类似。
  2. Java的常用输入、输出流
java.io包中的stream类根据它们操作对象的类型是字符还是字节可分为两大类: 字符流和字节流。
 
  • Java的字节流
InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
  • Java的字符流
Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
结合开始所说的输入/输出流 ,出现了个一小框架。

                     字节流                         字符流
输入流        InputStream               Reader
输出流        OutputStream            Writer

JAVA字节流

  • FileInputStream和FileOutputStream
    这两个类属于结点流,第一个类的源端和第二个类的目的端都是磁盘文件,它们的构造方法允许通过文件的路径名来构造相应的流。如:
    FileInputStream infile = new FileInputStream("myfile.dat");
    FileOutputStream outfile = new FileOutputStream("results.dat");

要注意的是,构造FileInputStream, 对应的文件必须存在并且是可读的,而构造FileOutputStream时,如输出文件已存在,则必须是可覆盖的。

  • BufferedInputStream和BufferedOutputStream
    它们是过滤器流,其作用是提高输入输出的效率。
  • DataInputStream和DataOutputStream
    这两个类创建的对象分别被称为数据输入流和数据输出流。这是很有用的两个流,它们允许程序按与机器无关的风格读写Java数据。所以比较适合于网络上的数据传输。这两个流也是过滤器流,常以其它流如InputStream或OutputStream作为它们的输入或输出。
    Java的字符流

        字符流主要是用来处理字符的。Java采用16位的Unicode来表示字符串和字符,对应的字符流按输入和输出分别称为readers和writers。
    • InputStreamReader和OutputStreamWriter
      在构造这两个类对应的流时,它们会自动进行转换,将平台缺省的编码集编码的字节转换为Unicode字符。对英语环境,其缺省的编码集一般为ISO8859-1。
    • BufferedReader和BufferedWriter
      这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理。如:
      import java.io.*;
      public class Echo {
        public static void main(String[] args) {
          BufferedReader in =
            new BufferedReader(
              new InputStreamReader(System.in));
          String s;
          try {
            while((s = in.readLine()).length() != 0)
              System.out.println(s);
            // An empty line terminates the program
          } catch(IOException e) {
            e.printStackTrace();
          }
        }
      }
    该程序接受键盘输入并回显。
    对BufferedReader类,该类的readLine()方法能一次从流中读入一行,但对于BufferedWriter类,就没有一次写一行的方法,所以若要向流中一次写一行,可用PrintWriter类将原来的流改造成新的打印流,PrintWriter类有一个方法println(),能一次输出一行。如:
    ............
    PrintWriter out = new PrintWriter(new BufferedWriter(
          new FileWriter("D:\javacode\test.txt")));
    out.println("Hello World!");
    out.close();
    ............

    例子:

    1,与控制台相关。的读入/写出。 实现了字符串的复制。

    import java.io.*;
    public class TextRead{

    public static void main(String[] args){
       BufferedReader bf = null;/*BufferedReader相当于一个大桶,其实就是内存,这里实现了大量大量的读写 ,而不是读一个字节或字符就直接写如硬盘,加强了对硬盘的保护。*/
       try{
        while(true){ // while(true){}循环保证程序不会结束
        
           bf = new BufferedReader(new InputStreamReader(System.in));
           /*System.in 为标准输入,System.out为标准输出*/
           /*InputStreamReader用语将字节流到字符流的转化,这也就是处理流了
            *在这里相当与2个管道接在System.in与程序之间。
            *readLine()方法功能比较好用,也就通过处理流来实现更好功能。
            **/
         String line = bf.readLine();
         System.out.println(line);
        }  
       }catch(Exception e){
        e.printStackTrace();
       }finally{
        //一定要关闭流,用完后。最好放在

    filally 里面。  
        try{   
         if(bf!=null){
          bf.close();
         }
        }catch(Exception e){
           e.printStackTrace();
        }
        
       }
       
    }

    }

    2,与文件 相关的 读写。    实现了文件的复制。
    import java.io.*;
    public class TextRead{

    public static void main(String[] args){
       File fin,fout;  
       BufferedReader bf = null;
       PrintWriter pw = null;
       try{
        fin = new File("zzc.txt"); //注意文件与程序都要在同一个文件夹下。zzc.txt为要被复制的文件。
       
        fout = new File("copyzzc.txt"); //如果没有会自动创建。
       
        bf = new BufferedReader(new FileReader(fin));
       
          pw = new PrintWriter(fout); //PrintWriter为打印流,也可以使用BufferedWriter.
        String line = bf.readLine();
        while(line!=null){
         pw.println(line);
        
         line = bf.readLine();
        }
       
       
       }catch(Exception e){
        e.printStackTrace();
       
       }finally{
        try{
        //关闭 文件。
         if(bf!=null){
          bf.close();
          bf = null;
         }
         if(pw!=null){
          pw.close();
          pw = null;
         }
        }catch(Exception e){
         e.printStackTrace();
        }
       }
       
    }

    }

    也是在一个百度好友上看到一篇关于流的文章写的更详细,把好多过时的不用的,哪写常用的都分类了,

    还有好多类:

    像RandomAccessFile类,序列化接口,都十分重要。

    Java有一种特殊类型的IO数据流——DataOutputStream——它可以保证“无论数据来自何种机器,只要使用一个DataInputStream收取这些数据,就可用本机正确的格式保存它们.

    以后在把示例加上,还有写比较好的方法。

    其实感觉这已经是固定模式了,一提到从键盘读取数据 就会联想到:

    new BufferedReader(new InputStreamReader(System.in))

    现在水平达不到,还是记些固定格式比较好,以至于会用。

    某个老师也说过,创新是建立在扎实的基础之上,越来越觉得基础重要了。

分享到:
评论

相关推荐

    java中IO流例子

    Java中的IO流是Java平台提供的一种处理输入输出数据的核心机制,广泛应用于文件读写、网络通信、数据转换等场景。IO流分为字节流(Byte Stream)和字符流(Character Stream),它们构成了Java IO系统的基础。 1. *...

    Java中IO流的基础知识点

    Java中IO流的基础知识点

    Java 的 IO流笔记.md

    ### Java IO流学习笔记 #### 一、IO流的四大抽象类 - **InputStream/OutputStream**:字节的输入输出流的抽象类。 - 数据单位:字节(8比特,范围0-255) - **Reader/Writer**:字符的输入输出流的抽象类。 - ...

    java中的IO流操作大全

    在Java中,IO流操作是用于处理输入与输出的抽象机制,它提供了在不同的数据源和目标之间传输数据的手段。流的概念最早起源于UNIX系统中的管道概念,是一个连续的数据流,可以理解为水流,从源端流向目的端。 一、流...

    Java中io流解析及代码实例

    Java中IO流解析及代码实例 Java中IO流是一种基本的输入/输出机制,用于读取和写入数据。IO流可以分为两种:字节流和字符流。字节流按照字节来读取和写入数据,而字符流按照字符来存取数据。 字节流 字节流是Java...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

    java中IO流里面的关于File的讲解源码

    IO流(Input/Output Stream)是Java中处理数据输入和输出的一种机制,分为字节流和字符流两大类。字节流处理的是字节数据,如`InputStream`和`OutputStream`;字符流处理的是字符数据,如`Reader`和`Writer`。`...

    IO流 javaio java 流

    Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...

    Java中文件IO流.pdf

    Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream ...

    JAVA7种IO流的基本使用

    在这个话题中,我们将深入探讨Java中的七种主要IO流及其基本用法,包括BufferedWriter、FileReader、转换流(InputStreamReader/OutputStreamWriter)以及缓存流(BufferedInputStream/BufferedOutputStream)。...

    java中的io流详解

    程序可以通过输入流从数据文件读取数据,但不可向输入流中写入数据;反之,程序可以通过输出流向数据文件中写入数据。 Java 中的 IO 流类的组织模式可以分为低层次和高层次两种界面。低层次界面主要是由包 java.io ...

    Java中IO流详解

    Java中IO流详解 Java中IO流详解是指Java语言中负责输入输出操作的类库,主要包括字节流和字符流两大类。下面将详细介绍Java中IO流的知识点。 一、IO解决的问题 IO流解决了设备之间的数据传输问题,例如硬盘和...

    java之io流实例

    Java中的IO流是Java语言处理输入输出操作的重要组成部分,它为数据传输提供了强大的支持。本文将深入探讨Java的IO流实例应用,旨在帮助开发者更好地理解和掌握这一关键概念。 IO流在Java中分为两大类:字符流...

    Java IO流几种经典使用方式

    ### Java IO流几种经典使用方式 #### 一、输入输出流(Input/Output Stream) ...这段示例代码展示了如何使用`BufferedReader`和`BufferedWriter`来读取和写入文件,体现了Java IO流在实际应用中的灵活性和高效性。

    Java中IO流简介_动力节点Java学院整理

    Java io系统的设计初衷,就是为了实现“文件、控制台、网络设备”这些io设置的通信。例如,对于一个文件,我们...而到了java 1.1,为了与国际化进行接轨,在java io中添加了许多以字符(Unicode)为单位进行操作的类。

    Java_IO流详解

    Java_IO流详解 Java 的核心库 java.io 提供了全面的 IO 接口,包括文件读写、标准设备输出等。Java 中 IO 是以流为基础进行输入输出的,所有数据被串行化写入输出流,或者从输入流读入。在项目开发中,IO 是非常...

    Java 中IO流字符流详解及实例

    * OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。 3. 文件读写流 文件读写流是文件读写操作的基本实现。FileReader 和 FileWriter 是读取字符文件和写入字符...

    JAVA_IO流学习总结

    JAVA_IO流学习总结

    Java中IO流 RandomAccessFile类实例详解

    Java中IO流 RandomAccessFile类实例详解 Java中的IO流 RandomAccessFile类实例详解是Java中IO流的重要组成部分。RandomAccessFile类提供了对文件内容的访问,既可以读文件,也可以写文件。同时,RandomAccessFile类...

    java基础 IO流

    java基础中的IO流是Java提供的一套用于文件读写操作的流式API,它包括字节流和字符流两种基本类型。字节流主要用在处理二进制数据,而字符流则是处理文本数据。 首先,文档中提到了`File`类,它是IO流操作中用于...

Global site tag (gtag.js) - Google Analytics