JAVA IO 流学习总结

java.IO层次体系结构

JAVAIO流类图结构
在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了

  1. 流式部分――IO的主体部分
  2. 非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;
  3. 其他类–文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。
    主要的类如下:
    1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
    2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
    3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
      Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。为此,JAVA中引入了处理字符的流。
    4. Reader(文件格式操作):抽象类,基于字符的输入操作。
    5. Writer(文件格式操作):抽象类,基于字符的输出操作。
    6. RandomAccessFile(随机文件操作):它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。

非流式文件类

三种构造函数:

  1. File (String pathname)
    例:File f1=new File(“FileTest1.txt”); //创建文件对象f1,f1所指的文件是在当前目录下创建的FileTest1.txt
  2. File (String parent , String child)
    例:File f2=new File(“D:\dir1",“FileTest2.txt”) ;// 注意:D:\dir1目录事先必须存在,否则异常
  3. File (File parent, String child) 例:File f4=new File("\dir3"); File f5=new File(f4,“FileTest5.txt”); //在如果 \dir3目录不存在使用f4.mkdir()先创建
    一个对应于某磁盘文件或目录的File对象一经创建, 就可以通过调用它的方法来获得文件或目录的属性。

常用的方法:

常用成员方法:说明

1)public boolean exists( )
2)public boolean isFile( )
3)public boolean isDirectory( ) 判断是文件还是目录
4)public String getName( ) 返回文件名或目录名
5)public String getPath( ) 返回文件或目录的路径。
6)public long length( ) 获取文件的长度
7)public String[ ] list ( ) 将目录中所有文件名保存在字符串数组中返回。
File类中还定义了一些对文件或目录进行管理、操作的方法,常用的方法有:
1) public boolean renameTo( File newFile ); 重命名文件
2) public void delete( ); 删除文件
3) public boolean mkdir( ); 创建目录

import java.io.File; 
import java.io.IOException; 
public class TestFile { 
    public static void main(String args[]) throws IOException { 
        File dir = new File("\\root"); 
        File f1 = new File(dir, "fileOne.txt"); 
        File f2 = new File(dir, "fileTwo.java"); 
        // 文件对象创建后,指定的文件或目录不一定物理上存在  
        if (!dir.exists()) 
            dir.mkdir(); 
        if (!f1.exists()) 
            f1.createNewFile(); 
        if (!f2.exists()) 
            f2.createNewFile(); 
        System.out.println("f1's AbsolutePath=  " + f1.getAbsolutePath()); 
        System.out.println("f1 Canread=" + f1.canRead()); 
        System.out.println("f1's len= " + f1.length()); 
        String[] FL; 
        int count = 0; 
        FL = dir.list(); 
        for (int i = 0; i < FL.length; i++) { 
            count++; 
            System.out.println(FL[i] + "is in \\root"); 
        } 
        System.out.println("there are" + count + "file in //root"); 
    } 
 
} 

java.IO流类库

  1. io流的四个基本类
    java.io包中包含了流式I/O所需要的所有类。在java.io包中有四个基本类:InputStream、OutputStream及Reader、Writer类,它们分别处理字节流和字符流:
  2. io流的具体分类
    1. I/O类型来总体分类:
      1. Memory 从/向内存数组读写数据: CharArrayReader、 CharArrayWriter、ByteArrayInputStream、ByteArrayOutputStream
      2. 从/向内存字符串读写数据 StringReader、StringWriter、StringBufferInputStream
      3. Pipe管道 实现管道的输入和输出(进程间通信): PipedReader、PipedWriter、PipedInputStream、PipedOutputStream
      4. File 文件流 对文件进行读、写操作 :FileReader、FileWriter、FileInputStream、FileOutputStream 4. ObjectSerialization 对象输入、输出 :ObjectInputStream、ObjectOutputStream 5.DataConversion数据流 按基本数据类型读、写(处理的数据是Java的基本类型(如布尔型,字节,整数和浮点数)):DataInputStream、DataOutputStream 6.Printing 包含方便的打印方法 :PrintWriter、PrintStream 7.Buffering缓冲 在读入或写出时,对数据进行缓存,以减少I/O的次数:BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream 8.Filtering 滤流,在数据进行读或写时进行过滤:FilterReader、FilterWriter、FilterInputStream、FilterOutputStream过 9.Concatenation合并输入 把多个输入流连接成一个输入流 :SequenceInputStream 10.Counting计数 在读入数据时对行记数 :LineNumberReader、LineNumberInputStream 11.Peeking Ahead 通过缓存机制,进行预读 :PushbackReader、PushbackInputStream 12.Converting between Bytes and Characters 按照一定的编码/解码标准将字节流转换为字符流,或进行反向转换(Stream到Reader,Writer的转换类):InputStreamReader、OutputStreamWriter
    2. 按数据来源(去向)分类:
      1. File(文件): FileInputStream, FileOutputStream, FileReader, FileWriter
      2. byte[]:ByteArrayInputStream, ByteArrayOutputStream
      3. Char[]: CharArrayReader, CharArrayWriter
      4. String: StringBufferInputStream, StringReader, StringWriter
      5. 网络数据流:InputStream, OutputStream, Reader, Writer

常用的子类

  1. InputStream抽象类
    • FileInputStream:把一个文件作为InputStream,实现对文件的读取操作
    • ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用
    • StringBufferInputStream:把一个String对象作为InputStream
    • PipedInputStream:实现了pipe的概念,主要在线程中使用
    • SequenceInputStream:把多个InputStream合并为一个InputStream
  2. OutputStream抽象类
    • ByteArrayOutputStream:把信息存入内存中的一个缓冲区中
    • FileOutputStream:把信息存入文件中
    • PipedOutputStream:实现了pipe的概念,主要在线程中使用
    • SequenceOutputStream:把多个OutStream合并为一个OutStream流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。
  3. 文件输入流:FileInputStream类
    FileInputStream可以使用read()方法一次读入一个字节,并以int类型返回,或者是使用read()方法时读入至一个byte数组,byte数组的元素有多少个,就读入多少个字节。在将整个文件读取完成或写入完毕的过程中,这么一个byte数组通常被当作缓冲区,因为这么一个byte数组通常扮演承接数据的中间角色。
    测试代码见Client中的testFileInputStream、testFileOutputStream、copyFile
  4. 缓冲输入输出流 BufferedInputStream/ BufferedOutputStream
    计算机访问外部设备非常耗时。访问外存的频率越高,造成CPU闲置的概率就越大。为了减少访问外存的次数,应该在一次对外设的访问中,读写更多的数据。为此,除了程序和流节点间交换数据必需的读写机制外,还应该增加缓冲机制。缓冲流就是每一个数据流分配一个缓冲区,一个缓冲区就是一个临时存储数据的内存。这样可以减少访问硬盘的次数,提高传输效率。
    BufferedInputStream:当向缓冲流写入数据时候,数据先写到缓冲区,待缓冲区写满后,系统一次性将数据发送给输出设备。
    BufferedOutputStream :当从向缓冲流读取数据时候,系统先从缓冲区读出数据,待缓冲区为空时,系统再从输入设备读取数据到缓冲区。
    1. 将文件读入内存
    将BufferedInputStream与FileInputStream相接
    FileInputStream in=new  FileInputStream("file1.txt");
    BufferedInputStream bin=new  BufferedInputStream(in);
    
    1. 将内存写入文件:
    将BufferedOutputStream与 FileOutputStream相接
    
    FileOutputStreamout=new FileOutputStream("file1.txt");
    BufferedOutputStream  bin=new BufferedInputStream(out);
    
    1. 键盘输入流读到内存
    将BufferedReader与标准的数据流相接
    
    InputStreamReader sin=new InputStreamReader(System.in);
    BufferedReader bin=new BufferedReader(sin);
    

https://www.cnblogs.com/runningTurtle/p/7088125.html

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值