输入输出流


获取文件和目录的属性

Java中,提供了获取和修改文件/目录属性的类java.io.File。File类与平台无关,适用于不同的文件系统。在程序中,通过创建File类的对象来代表一个文件和目录,利用这个对象可以对文件和目录的属性进行有关操作。

File类的主要方法

File(String pathname):将给定路径名字符串转换为抽象路径名来创建新的File实例

boolean exists():判断File对象对应的文件或目录是否存在

File getAbsoluteFile():获取File对象对应的绝对路径名形式

String getAbsolutePath():获取File对象对应的绝对路径名字符串

String getName():获取File对象表示的文件或目录的名称

boolean isAbsolute():判断File对象对应的抽象路径名是否为绝对路径名

boolean isDirectory():判断File对象代表的是否是一个目录

boolean isFile():判断File对象代表的文件是否是一个标准文件

boolean isHidden():判断File对象代表的文件是否是一个隐藏文件

long lastModified():获取File对象代表的文件最后一次被修改的时间

long length():获取File对象代表的文件的长度

String[] list():获取File对象对应的目录中的文件和目录列表

例:对文件和目录的操作

Java中的路径分隔符:一个“/”和“\\”都可用。


Java中的I/O流

一、I/O流的概念

流是一组有序的数据序列。根据数据流的流动方向,分为输入流和输出流;根据流动的内容,分为字节流和字符流。

输入流的指向成为源,程序从指向源的输入流中读取数据。当程序开始读数据时,就会打开一个通向数据源的流,这个数据源可以是文件、内存或网络。比如:在程序中需要从文件a中读取数据时,此时文件a就是数据源,在程序和文件a间的管道称为流,因数据是从文件流向程序,所有称为输入流。

输出流的指向是字节/字符流向的地方,程序通过向输出流中写入数据把信息传递到目的地。当程序需要写入数据时,就会打开一个流向目的地的流。比如:在程序中需要把一些数据写入文件b时,此时文件b就是数据的目的地,在程序和文件b之间的管道称为流,因数据是从程序流向文件b,所以称为输出流。

二、InputStream流

该流是字节输入流的抽象类,是所有字节输入流的父类,其读取的是字节流。其常用方法:

FileInputStream(String name):通过打开一个到实际文件的连接来创建实例对象

int available():返回此输入流的数据读取方法可以读取的有效字节数

void close():关闭此输入流并释放与该流关联的所有系统资源

abstract int read():从输入流中读取一个数据字节

int read(byte[] b):从输入流中读取一定数量的字节,并存储在数组b中

int read(byte[] b,int off,int len):将输入流中最多len个数据字节读入byte数组

long skip(long n):跳过或丢弃此输入流中n个字节的数据

三、OutputStream流

该流是字节输出流的抽象类,是所有字节输出流的父类,其常用方法:

FileOutputStream(String name):创建一个向指定名称的文件中写入数据的输出字节流

void close():关闭当前输出流并释放与此流有关的所有系统资源

void flush():刷新当前输出流并强制将缓冲区的字节写入文件

void write(byte[] b):将b数组中的字节写入当前输出流

void write(byte[] b,int off,int len):将数组中下标从off开始的len个字节写入输出流

abstract void write(int b):将指定的字节写入此输出流


字节流

一、FileInputStream流

该类是InputStream类的子类,用于从磁盘文件中读取字节流数据。该类的所有方法都从InputStream类继承而来。

例:从文件in.txt中读取并显示文件的内容

使用FileInputStream类时需注意:

(1)待读取的文件一定要存在,否则会出现异常

(2)文件的路径可以采用绝对路径和相对路径。

(3)该类既可以读取文本文件,也可以读取二进制文件,如图像、声音等。

(4)在不需要时,要及时关闭流对象,释放与它关联的所有系统资源。

二、FileOutputStream流

该类是OutputStream类的子类。它能够实现以字节形式将数据写入文件中。该类的所有方法都是从OutputStream类继承并重写的。在创建该类的实例对象时,文件可以使用相对路径和绝对路径;如果文件不存在,则创建一个新的文件,如果文件存在,则把原来的文件删除,然后再创建一个新的文件。

例:将文件notepad.exe的内容复制到note.exe文件中

FileOutputStream类执行写文件操作时,只能从文件开始部分写入,不能实现追加写入的功能。


字符流

字节输入流和输出流类只能处理普通的字节流,对字符流的处理不方便,容易引发错误。java.io包中有专门处理字符流的类。

一、Reader流

该类是处理字符输入流的父类,是一个抽象类,不能实例化对象。其常用方法:

read():从流中读入一个字符

read(char[]):从流中将一些字符读入数组

ready():判断是否准备好读取此流

reset():重置该流

skip(long n):跳过参数n指定的字符数量

二、Writer流

是字符输出流的父类,其定义了写入字符和字符数组的方法,与Reader、InputStream类相似,在创建对象时会自动打开流,通过显示调用close()方法关闭流,其常用方法:

abstract void close():先刷新流,然后关闭该流

void write(char[] cbuf):将字符数组的内容写入流

void write(int c):向流中写入单个字符

void write(String str):向流中写入字符串

void write(String str,int off,int len):将字符串的某一部分写入流

三、FileReader流

是Reader类的子类,实现从文件中读取字符数据,是文件字符输入流。

例:将word文件“java.txt”读出并输出到控制台

四、Filewriter流

是Writer类的子类,实现了将字符数据写入文件的功能,是文件字符输出流。如果需要写入的文件不存在,则会新建该文件,否则会删除旧文件,建立新的文件。

例:创建5个2000之内的随机数,然后存储到文件rand.txt中