---------------------- 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培训、期待与您交流! ----------------------