Java数据流
在JAVA中,把不同类型的输入输出源抽象为流(Strean),而其中输入或输出的数据称为数据流(data stream)。
数据流的基本概念
数据流是一组有顺序的、有起点和终点的数据字节集合。
数据流可以被分为输入数据流(input stream)和输出数据流(output stream);输入数据流只能读不能写,输出 数据流只能写不能读。
输入数据流
输入数据流是指只能读不能写的数据流,用于向计算机输入数据。
java.io 中的所有输入数据都是抽象类InputStream继承而来,并且实现了其中的所有方法,包括读取数据,标记位置,重置读写指针,获取数据量。从数据流中读取数据时,必须有一个数据源和数据流相连。
输入数据流的主要数据操作方法有:
* int read();
* int read(byte[]b)
* int read(byte []b,int off,int len)
以上三个函数提供访问数据流中的数据的方法,函数所读取的数据都默认为字节类型。其中最简单的是第一个read方法,它向输入流中读一个字节的二进制数据,然后以此数据为低位字节,微商一个全零字节,形成一个0~255之间的整数返回,当输入结束的时候,它会得到-1,标志数据流的结束。第二个read()方法将多个字节读到数组中,填满整个数组。第三个read()方法从输入流中读取长度为len的数据,从数组下标为off的位置开始放置读入的数据,读毕返回读取的字节数。
在实际应用中,为提高效率,读取数据时经常以系统允许的最大数据块长为单位读取。要与BufferedInputStream相连。
- void close()
当结束对一个数据流的操作时要将其关闭。同时释放与该数据流相关的资源。用到的方法是close()。
- int available()
该方法返回的是目前可以从字节中读取的字节数。
输出数据流
- void write(int i)
将字节i 写入数据流中。
- void write(byte[]b)
将数组中的全部字节写入数据流。
- void write(byte[]b,int off,int len)
将数组中的第off个字节开始的len个字节写入数据流。
基本直接数据流类
前面提到的InputStream和OutputStream两个类都是抽象类。在实际运用中,我们用到的都是他们的子类。
文件数据流
文件数据流包括FileInputStream和FileOutputStream,这两个类用来进行IO处理,其数据源和终点源都应该是文件。
在使用文件数据流进行I/O操作的时候,类似于FileInputStream的实例对象。如果指定的文件不存在,就会抛出FileNotFoundException
异常。对于类FileOutputStream的实例对象,如果指定的文件不存在,就会创建一个新的文件,如果文件存在,那么新写入的内容会覆盖原有数据。
过滤流
过滤流(filter)是另外一种数据流。一个过滤数据流在创建时与一个已经存在的数据流相连。因此在这样的数据流中读取数据时,它提供的是对一个原始输入数据流的内容进行了特定处理的数据。
缓冲区数据流
缓冲区数据流有BufferedInputStream和BufferedOutputStream,他们都属于过滤器数据流,都是在数据流上增加了一个缓冲区。当读写数据时,数据以块为单位先进入缓冲区(块的大小可以自行设置),其后的读写操作则是作用于缓冲区。
in
FileInputStream fis=new FileInputStream("myfile");
inputstream is=new BufferedInputStream(fis);
out
FileOutputStream fos=new FileOutputStream("myfile");
OutputStream os=new BufferedOutputStream(fos);
一般在关闭一个缓冲区输出流之前,应使用flush()方法,强制输出剩余数据,以确保缓冲区内的所有数据全部写入写出。
数据数据流
在前面提到的数据流中,处理的数据都是字节或者字节数组,这是进行数据传输系统默认的数据类型。DataInputStream和DataOutputStream就是这样的两个过滤器,可以用来读写Java基本类型。
对象流
能够输入输出对象的流称为对象流。Java的数据流不仅能对基本数据类型进行操作,而且也提供吧对象写入文件数据流或从文件数据流中读出的功能。
这一功能是通过java.io包中的ObjectInputStream和ObjectOutputStream两个类实现的。
文件的处理
File类
在对一个文件进行I/O操作之前,必须先获得有关这个文件的基本信息。
创建File类的对象之后,可以使用相关方法获取文件的信息。
- 与文件名相关的方法:
String getName()_获取文件名
String getPath()_获取文件路径
String getAbsolutePath()_获取文件的绝对路径
String getPatent()_获取文件的父目录
boolean renameTo(File newName)_更改文件名
- 文件测定方法:
boolean exists()_文件对象是否存在
boolean canWrite()_对象是否可写
boolean canRead()_对象是否可读
boolean isFile()_对象文件是否是文件
boolean isDirectory()_对象文件是否是目录
boolean isAbsolute()_文件对象是否是绝对路径
- 常用文件信息和方法
long lastModified()_获取文件最后修改的时间
long length()_获取文件的长度
boolean delete()_删除文件对象指向的文件
- 目录工具
boolean mkdir()_创建新目录
boolean mkdirs()_创建新目录(一次性生成多个层次的子目录)
String []list()_列出符合模式的文件名