欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java IO系统(1)

程序员文章站 2022-04-23 17:49:05
...

       java IO操作主要是指的是使用java进行输入、输出操作,java中的所有操作类都放在java.io包中。在这个java.io包中最重要的就是5个类和一个接口,5个类指的是File、OutputStream、InputStream、Write、Reader,一个接口指的是Serializable。掌握这些IO操作的核心就可以掌握了。

       Java 流在处理上分为字符流和字节流。字符流处理的单元为 2 个字节的 Unicode 字符,分别操作字符、字符数组或字符串,而字节流处理单元为 1 个字节,操作字节和字节数组。

       Java 内用 Unicode 编码存储字符,字符流处理类负责将外部的其他编码的字符流和 java 内 Unicode 字符流之间的转换。而类 InputStreamReader 和 OutputStreamWriter 处理字符流和字节流的转换。字符流(一次可以处理一个缓冲区)一次操作比字节流(一次一个字节)效率高。 

一、File类介绍

     在整个IO包中,唯一与文件本身有关的类就是File类。使用File类可以进行创建和删除文件等常用操作。

     ①File类的构造函数:public File(String pathName)-->实例化File类时,必须要设置好路径。

     ②File类中常用的方法

java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
 注意:除了以上这些常用方法外,在File中还有一些静态常量字段也很有用,分别是:

separatorChar----public static final char separatorChar

与系统有关的默认名称分隔符。此字段被初始化为包含系统属性 file.separator 值的第一个字符。在 UNIX 系统上,此字段的值为 '/';在 Microsoft Windows 系统上,它为 '\'。

②separator----public static final String separator

与系统有关的默认名称分隔符,为了方便,它被表示为一个字符串。此字符串只包含一个字符,即 separatorChar。

③pathSeparatorChar----public static final char pathSeparatorChar

与系统有关的路径分隔符。此字段被初始为包含系统属性 path.separator 值的第一个字符。此字符用于分隔以路径列表 形式给定的文件序列中的文件名。在 UNIX 系统上,此字段为 ':';在 Microsoft Windows 系统上,它为 ';'。

④pathSeparator----public static final String pathSeparator

与系统有关的路径分隔符,为了方便,它被表示为一个字符串。此字符串只包含一个字符,即 pathSeparatorChar。

二、RandomAccessFile类

     File类仅仅是对文件本身进行操作的,而如果要对文件进行操作,则可以使用RandomAccessFile类。此类属于随机读取类,可以随机的读取一个文件中指定位置的数据,常用的方法如下:

java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
 注意:如果使用rw方式声明RandomAccessFile对象,在写入的文件不存在时,系统将自动进行创建。

三、字节流

字节流主要操作byte类型数据,以byte数组为准,主要操作类是OutputStream和InputStream。

①先了解一下InputStream的作用和提供的方法

InputStream是从文件中把内容读取出来,InputStream本身是一个抽象类,必须依赖其子类。InputStream提供的方法如下:

java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
 InputStream由于是一个抽象类,所以具体的实现还需要通过它的子类完成,下面就介绍一下有它衍生出来的子类,以及这些子类的作用。

java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
FileInputStream:把一个文件作为 InputStream ,实现对文件的读取操作。

PipedInputStream :实现了 pipe 的概念,主要在线程中使用 . 管道输入流是指一个通讯管道的接收端。一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

ByteArrayInputStream:从内存中每次读取一个字节的数据,然后保存到内置的缓冲区中。维持一个计数器用来记录从数据源中读入的字节数目。

      调用该输入流的close()方法不会产生任何实际的作用。因为它“关闭”的对象是---内存。而不是文件。不会抛出任何的IOException。

StringBufferInputStream: 把一个 String 对象作为 InputStream (已过时)。

注意:注释:不推荐使用 StringBufferInputStream 方法。 此类不能将字符正确的转换为字节。从一个串创建一个流的最佳方法是采用 StringReader 类。

SequenceInputStream :把多个 InputStream 合并为一个 InputStream . “序列输入流”类允许应用程序把几个输入流连续地合并起来,并且使它们像单个输入流一样出现。每个输入流依次被读取,直到到达该流的末尾。然后“序列输入流”类关闭这个流并自动地切换到下一个输入流。

DataInputStream:从底层的其它字节输入流中读取字节,然后转换成与机器无关的原始类型数据(boolean,byte,char)

BufferedInputStream:为底层的其它字节输入流增加一个“缓冲”的功能,除此之外还可以“标记”,“重置”输入流。当这个输出流的对象被创建时,一个内置的缓冲区也就被创建了。

 

      随着底层的输入流的不断读入,缓冲区中的数据也在不同刷新。一次性地从底层的输入流读入多个字节,方便后续的转码工作

②OutputStream提供将字节流写入到文件的功能。我们先查看一下OutputStream可以提供的操作:

java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
 OutputStream也是一个抽象类,它功能的实现也是由其衍生子类完成,如下:

java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
ByteArrayOutputStream : 该输出流能够将要写入内存的字节,先缓存到自身的缓冲区中。并且该缓冲区的大小可以自动增长。如果要从该输出流中提取字节,可以使用toByteArray,如果要还原为字符串,可以使用toString。

      关闭该输出流并不会产生任何的IOException,因为它的输出端是---内存而非文件。

FileOutputStream: 该输出流以原始字节(raw bytes)的方式向底层文件系统中写数据。在某些系统下,有时候只允许同一个文件

       打开一个输出流。所以如果该文件已经被打开了,则再次打开一个输出流会抛出异常。

PipedOutputStream: 管道输出流是指一个通讯管道的发送端。 一个线程通过管道输出流发送数据,而另一个线程通过管道输入流读取数据,这样可实现两个线程间的通讯。

PrintStream:为底层的输出流添加额外的功能,令到底层的输出流可以方便地输出各种经过“格式化”的数据。和其它输出流不同,该输出流并不会抛出IOException,但是可以通过checkError方法来检查是否有异常发生。

      该输出流具备自动flush功能,但写完一个字节数组,或者碰到一个println方法的调用,或者当要写出的字符是换行符时。会自动清空flush。

      默认情况下所有要写出的内存字符,都会被该输出流以平台默认编码方式,转换为字节流输出。

DataOutputStream:允许应用程序直接将基本类型数据(boolean, char, byte)直接写出到底层的输出流(内部转换为适当的字节)

BufferedOutputStream:为底层的输出流提供“缓冲”的功能,所有的写出请求和要写出的数据都会先缓冲到该输出流的缓冲区中,在适当的时机一次性写出。

      注意该类的write方法被调用时并不一定立即将内存中的数据写出到数据源,而可能先将数据缓存起来。

  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 103.5 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 131.6 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 60.2 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 82 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 73.3 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 48.1 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 58.5 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 48.8 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 68.9 KB
  • java IO系统(1)
            
    
    博客分类: java编程 java FileRandomAccessFile字节流InputStreamOutputStream 
  • 大小: 44.2 KB