`

java IO流学习总结

    博客分类:
  • java
 
阅读更多
Java中的流,可以从不同的角度进行分类。

    按流的方向分:输入流和输出流。

   按处理数据单位分:字节流和字符流。

   按实现功能分:节点流和处理流。

      输出流:





      输入流:



   字节流:一次读入或读出是8位二进制。

   字符流:一次读入或读出是16位二进制。

   字节流和字符流的原理是相同的,只不过处理的单位不同而已。后缀是Stream是字节流,而后缀是Reader,Writer是字符流。

   字节流:处理字节数据的流对象。设备上的数据无论是图片或者dvd,文字,它们都以二进制存储的。二进制的最终都是以一个8位为数据单元进行体现,所以计算机中的最小数据单元就是字节。意味着,字节流可以处理设备上的所有数据,所以字节流一样可以处理字符数据。



   节点流:直接与数据源相连,读入或读出。




   直接使用节点流,读写不方便,为了更快的读写文件,才有了处理流。

   处理流:与节点流一块使用,在节点流的基础上,再套接一层,套接在节点流上的就是处理流。




   下面是java IO流的结构示意图:




字符流:

   Reader:用于读取字符流的抽象类。

       |---BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大 多数情况下,默认值就足够大了。

             |---LineNumberReader:跟踪行号的缓冲字符输入流。此类定义了方法setLineNumber(int)和getLineNumbner(),它们可分别用于设置和获取当前行号。

        |---InputStreamReader:是字节流通向字符流的桥梁:它使用指定的 charset 读取字节并将其解码为字符。它使用的字符集可以由名称指定或显式给定,或者可以接受平台默认的字符集。

             |---FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。

***************************************************************************

   Writer:写入字符流的抽象类。

        |---BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

        |---OutputStreamWriter:是字符流通向字节流的桥梁:可使用指定的 charset 将要写入流中的字符编码成字节。它使用的字符集可以由名称指定或显式给定,否则将接受平台默认的字符集。

             |---FileWriter:用来写入字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是可接受的。要自己指定这些值,可以先在 FileOutputStream 上构造一个 OutputStreamWriter。

****************************************************************************

   字节流:

   InputStream:是表示字节输入流的所有类的超类。

        |--- FileInputStream:从文件系统中的某个文件中获得输入字节。哪些文件可用取决于主机环境。FileInputStream 用于读取诸如图像数据之类的原始字节流。要读取字符流,请考虑使用 FileReader。

        |--- FilterInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。

             |--- BufferedInputStream:该类实现缓冲的输入流。

**************************************************************************

   OutputStream:此抽象类是表示输出字节流的所有类的超类。

        |--- FileOutputStream:文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。

        |--- FilterOutputStream:此类是过滤输出流的所有类的超类。

              |--- BufferedOutputStream:该类实现缓冲的输出流。


   流的操作规律:

   1、明确源和目的。

   数据源:就是需要读取,可以使用两个体系:InputStream、Reader;

   数据汇:就是需要写入,可以使用两个体系:OutputStream、Writer;

   2、操作的数据是否是纯文本数据?

   如果是:数据源:Reader

           数据汇:Writer

   如果不是:数据源:InputStream

             数据汇:OutputStream

   3、虽然确定了一个体系,但是该体系中有太多的对象,到底用哪个呢?

   明确操作的数据设备。

   数据源对应的设备:硬盘(File),内存(数组),键盘(System.in)

   数据汇对应的设备:硬盘(File),内存(数组),控制台(System.out)。

   4、需要在基本操作上附加其他功能吗?比如缓冲。

   如果需要就进行装饰。
/记住,只要一读取键盘录入,就用这句话。

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));

BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));



下面是一个应用的例子:
[java] view plain copy

    <span style="color:#000000;">import java.io.*; 
    import java.nio.CharBuffer; 
    import java.util.Scanner; 
     
    import org.junit.Test; 
     
    public class Test1 { 
        @Test 
        public void testFile() throws IOException { 
     
            File file1 = new File("D:/test"); 
            file1.mkdir(); // 在D盘下创建test目录 
            File[] fileArr = file1.listFiles(); // 获取目录下的所有文件 
            for (File f : fileArr) { // 输出目录下的文件名 
                System.out.println(f.getName()); 
            } 
             
            String str; 
            System.out.println("请输入需要复制的文件名:"); 
            BufferedReader buf=new BufferedReader(new InputStreamReader(System.in)); 
                str = buf.readLine(); 
            if(str.equals("1.txt")){ 
                new copyFile().copyTxt(); 
            } 
            if(str.equals("1.jpg")){ 
                new copyFile().copyJpg(); 
            } 
             
            buf.close(); 
            File[] fileArr2 = file1.listFiles(); // 获取目录下的所有文件 
            for (File f : fileArr2) { // 输出目录下的文件名 
                System.out.println(f.getName()); 
            } 
             
     
        } 
     
    } 
     
    class copyFile { 
        public void copyTxt() throws IOException { 
            int number = 0; 
            File file1 = new File("D:/test/1.txt"); 
            File file2 = new File("D:/test/2.txt"); 
            BufferedReader bfRead; 
            BufferedWriter bfWrite; 
            bfWrite = new BufferedWriter(new FileWriter(file2)); 
            char[] arry = new char[1024]; 
            FileReader fRead = new FileReader(file1); 
            bfRead = new BufferedReader(fRead); 
     
            while ((number = bfRead.read(arry)) != -1) { 
                bfWrite.write(arry, 0, number); 
            } 
     
            bfWrite.close(); 
            bfRead.close(); 
     
        } 
     
        public void copyJpg() throws IOException  { 
                 
            File file1=  new File("D:/test/1.jpg"); 
            File file2= new File("D:/test/2.jpg"); 
            FileInputStream bfRead=new FileInputStream(file1);; 
            FileOutputStream bfWrite=new FileOutputStream(file2); 
            try { 
                byte[] arry = new byte[1024]; // 定义数组,传递流之间的数据 
                int count = 0; 
     
                while((count = bfRead.read(arry)) != -1) { 
                    bfWrite.write(arry, 0, count); 
                } 
     
                 
            } catch (FileNotFoundException e) { 
                System.out.println("filenotfound"); 
            } catch (IOException e) { 
                System.out.println("IoException"); 
            } 
            bfWrite.close(); 
            bfRead.close(); 
     
        } 
    } 
    </span> 
  • 大小: 5.4 KB
  • 大小: 6.6 KB
  • 大小: 13.7 KB
  • 大小: 23.8 KB
  • 大小: 274.1 KB
分享到:
评论

相关推荐

    javaio流学习总结.pdf

    JavaIO流学习总结 JavaIO流是Java语言中最基本的输入/输出机制,它提供了多种方式来读取和写入数据。下面是JavaIO流的学习总结。 一、 IO流的分类 IO流可以从不同的角度进行分类,包括: * 按流的方向分为:输入...

    2022年java io流学习总结.docx

    2022年的Java IO流学习总结主要涵盖以下核心知识点: 1. **流的概念**:流是数据传输的抽象概念,表示数据的流动方向,可以是从文件到内存,也可以是从键盘到屏幕。Java中的IO流分为两种基本类型,字节流(Byte ...

    JAVAIO流学习总结(转)

    这是别人总结的很有实用价值的javaIO流教程。

    javaio流学习总结-16页.pdf

    Java IO流学习总结 Java IO流是Java平台中用于处理输入输出的重要机制,它提供了一种在各种数据源和目的地之间传输数据的方式。流的概念是一个抽象的字节序列,允许我们从数据源读取数据或者向接收端写入数据。在...

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    JAVA_IO流学习总结

    JAVA_IO流学习总结

    javaio流学习总结范文.doc

    本篇总结主要围绕Java IO流的基础概念、分类以及常用方法展开。 首先,Java IO流按照数据流动的方向可分为输入流(Input Stream)和输出流(Output Stream)。输入流负责从源(如文件、网络连接)读取数据,而输出...

    javaio流学习总结.docx

    以下是对Java IO流的详细总结: 一、流的分类 1. 按流的方向:Java IO流分为输入流(InputStream和Reader)和输出流(OutputStream和Writer)。输入流用于从数据源读取数据,而输出流则用于向目标位置写入数据。 ...

    JavaIO流学习总结报告.doc

    虽然本报告主要讨论了基础的IO流,但了解NIO也是Java IO学习的重要部分。 总之,Java IO流是处理输入输出的核心工具,理解字节流与字符流的区别、流的层次结构以及基本操作方法,对于进行文件读写、网络通信等任务...

    JavaIO流学习总结.pdf

    Java IO流是Java平台中用于处理输入和输出的重要机制,它是数据在计算机内存与外部设备之间传输的桥梁。Java IO库包含了大量的类和接口,这些类可以被组织成层次结构,便于理解和使用。 首先,我们要了解流的概念。...

    java-io流学习总结.doc

    Java IO 流学习总结 Java IO 流是 Java 语言中最重要的 Input/Output 机制之一,通过流我们可以自由地控制文件、内存、IO 设备等数据的流向。流机制是 Java 及 C++中的一个重要机制。 一、什么是流? 流是字节...

    java之io流学习总结

    ### Java IO流学习总结 #### 一、Java中为什么提出流的概念? 在计算机科学中,数据经常需要在程序和外部设备之间传输。这些外部设备包括但不限于磁盘、网络连接甚至是键盘和屏幕。为了统一和简化这种数据交互的...

    JAVA-IO流学习总结.docx

    ### JAVA IO流学习总结 #### 一、流的概念与分类 **流(Stream)**是一种抽象的概念,用来表示数据的有序集合,这些数据可以被连续读取或写入。在Java中,流是处理输入/输出(I/O)的核心机制,允许程序员以一种统一...

Global site tag (gtag.js) - Google Analytics