Java基础_I/O流

来源:互联网 发布:简谱打谱软件 mac版 编辑:程序博客网 时间:2024/06/08 15:40

---------------------- android培训、java培训、期待与您交流! ----------------------

 

 

        输入和输出时程序设计语言的一项重要功能,使程序和用户之间沟通的桥梁。方便易用的输入输出使程序和用户之间产生良好的交互。输入功能使程序可以从外界,如键盘、磁盘文件等接收信息。输出功能使程序可以将运算结果等信息传递给外界,如屏幕、打印机、磁盘文件等。

Java提供了专门用于输入输出功能的包java.io,其中包含五个最重要的类,几乎所有与输入输出有关的类都继承了这5个类,即InputStream,OutputStream,Reader,Writer和File。利用这些类,java程序可以很方便地实现多种输入输出操作和复杂的文件与目录管理。

一、 输入/输出流类

1、 InputStream类

         InputStream类中包含了一套所有输入类都需要的方法,可以完成最基本的从输入流读取数据的功能。

         由于InputStream是一个抽象类,所以实际应用中创建的对象是InputStream的某个子类的对象,通过该子类对象与外设数据源连接。InputStream子类对象继承InputStream类的如下方法:

      (1) read( )方法

        read( )方法是从输入流读入数据的方法,有两种不同的read( )方法,其共同点是只能逐字节地读取输入数据。该方法的定义如下:

public int read( )

public int read(byte b[] )

     (2) 定位指针的方法

        每个流有一个指针,每次读入数据都是从指针位置开始进行。流在刚被创建时,指针位于流的第一个数据,以后每读入一个数据(字节),指针自动后移一个(字节)位置,指向未读取的下一个数据。

        InputStream中用来控制指针位置的方法有以下几个:

        ① public long skip(long n):将指针从当前位置向后跳动n个字节。

        ② public void mark( ):在指针位置做一个标记。

        ③ public void reset( ):将指针移动到标记位置。

    (3) close( )方法

       当输入流使用完毕后,可以调用close( )方法将其关闭,断开java程序与外设数据源的连接,释放此连接所占用的系统资源。我们知道,一个对象在没有引用变量指向它时,它就会变成垃圾,最终会被垃圾回收器从内存中清除。

       那么为什么还要调用close( )方法来释放相关的资源呢?这是因为当程序创建一个I/O流对象的同时也会创建一个叫流的东西,在这种情况下计算机内存实际产生了两个事物:一个是java程序的类实例对象,一个是系统本身产生的某种资源。而Java垃圾回收器只能管理程序中的类实例对象,不会管理系统产生的资源,所以我们需要自己去调用流对象的close( )方法去通知系统去释放对象所表示的流资源。

2、 OutputStream

      OutputStream类中包含所有输出流都要使用的方法。由于OutputStream是一个抽象类,不能直接创建OutputStream的对象,而应该创建其某个字类的对象。OutputStream子类继承以下方法。

    (1) write( )方法

      write( )方法是向输出流泄入数据的方法,有两种不同的write( )方法,其共同点是只能逐字节地输出数据。write( )方法的定义形式如下:

     public void write(int b):

     public void write(byte b[ ])

   (2) flush( )方法

       为了减少和输出设备的交互次数,提高输出效率,java还提供了具备缓冲功能的子类。对于具备缓冲功能的子类,write( )方法所写的数据并没有直接传输到相连的外设上,而是暂时存放在流的缓冲区中,等到缓冲区中的数据积累到一定程度时,才统一执行一次向外设写操作,把所缓冲的数据全部写到外设中。但是在某些情况下,缓冲区中的数据并未满就需要其写到外设中,此时应使用flush( )方法强制清空缓冲区,并将缓冲区中的现有数据写入外设。

   (3) close( )方法

      当输出流使用完毕后,可以调用close( )方法将其关闭,断开java程序与外设数据源的连接,释放此连接所占用的系统资源。

3、 Reader

      Reader类用来以字符方式从流中读入数据。Reader类具有与InputStream类相似的方式。Reader子类对象继承Reader类的如下方式:

    (1) read( )

    (2) 定位指针的方法

     ① public long skip(long n):将指针从当前位置向后跳动n个字节。

     ②public void mark( ):在指针位置做一个标记。

     ③public void reset( ):将指针移动到标记位置。

(3) close( )

4、 Writer

      Writer类用来以字符方式向输出流中写入数据。Writer类具有与OutputStream类相似的方法。Writer子类对象继承Writer类的如下方式:

      ① write( )方法

      ② flush( )方法

      ③ close( )方法

二、 File类

       如果程序运行过程中,需要输入或者输出的信息量大,直接用键盘或显示器显然不大可行,此时可以采用文件。即将要输入的信息预先保留到磁盘文件中,程序运行时,直接从文件读入信息;程序的大量输出信息直接写入磁盘文件。为此,java提供了功能强大的文件及目录操作功能。

      在程序中要对磁盘文件或目录进行操作,首先要对文件或目录建立连接,为此java提供了File类。File类也为了java.io包中,但不是流类,它不负责数据的输入或输出,而专门用来管理磁盘文件和目录。

1、 建立File对象

对文件或目录操作前,首先要为文件或目录建立File类对象。建立File类对象需要提供文件或目录的名称及路径。File类提供了三个不同的构造方法:

(1) File(String path)

(2) File(String path,String name)

(3) File(File dir,String name)

2、 File对象的属性和操作

(1) 创建文件:

public boolean creatNewFile( ):创建一个新的文件。

(2) 获得文件或目录名称与路径

public String getName( ):返回值为String型,其值为文件或目录名。

public String getPath( ):返回值为String型,其值为文件或目录路径。

(3) 判断文件或目录是否存在

public boolean exists( ):返回值为boolean型,如果文件或目录存在,返回true,否则返回false。

(4) 获取文件长度

public long length( ):返回文件的字节数。

(5) 获取文件读写属性

public boolean canRead( ):对可读文件返回值为true,否则返回false。

public boolean canWrite( ):对可写文件返回值为true,否则返回false。

(6) 比较文件或目录

public boolean equals(File file):若该文件或目录与file所对应的文件或目录相同,返回true,否则返回false。

(7) 判断是文件还是目录

public boolean isFile( ):如果是文件返回true,否则返回false。

public boolean isDirectiry( ):如果是目录返回true,否则返回false。

(8) 重名名文件

public boolean renamaTo(File file):将该文件改名为file所表示的文件名。

9) 删除文件

public void delete( ):删除文件。

三、 Java程序与其他进程的数据通信

1、 在java程序中可以用Process类的实例对象来表示子进程,子进程的标准输入和输出不再连接到键盘和显示器,而是以管道流的形式连接到父进程的一个输入输出流对象上。

2、 调用Process类的getOutputStream和getInputStream方法可以获得连接到子进程的输出流和输入流对象。

3、 主进程结束时,记住调用Process类的destroy方法结束子进程的运行。

 

 

 ---------------------- android培训、java培训、期待与您交流! ----------------------

原创粉丝点击