io包中的类:
- 用于读写本地文件系统中的文件:FileInputStream 和 FileOutputStream
- 描述本地文件系统中的文件或目录:File、FileDescriptor 和 FilenameFilter
- 提供对本地文件系统中文件的随机访问支持:RandomAccessFile
顺序读写:
FileInputStream 类用于打开一个输入文件,若要打开的文件不存在,则会产生异常 FileNotFoundException,这是一个非运行时异常,必须捕获或声明抛弃;
在 InputStream 类中,方法 read()
提供了三种从流中读数据的方法:
int read()
:从输入流中读一个字节,形成一个 0~255 之间的整数返回(是一个抽象方法)int read(byte b[])
:从输入流中读取一定数量的字节,并将其存储在缓冲区数组b
中。int read(byte b[],int off,int len)
:从输入流中读取长度为len
的数据,写入数组b
中从索引off
开始的位置,并返回读取得字节数。
对于这三个方法,若返回 -1,表明流结束,否则,返回实际读取的字符数。
文件构造方法:
//一个目录路径参数 File f1 = new File("/home/project/"); //对象有两个参数——路径和文件名 File f2 = new File("/home/project/","a.bat"); //指向f1文件的路径及文件名 File f3 = new File(f1,"a.bat");
文件读取的代码:
FileReader file = new FileReader("文件存储路径"); //声明一个文件输入流file,并指明该文件在系统中的路径以方便定位 int data = 0; //声明一个整型变量用于存放读取的数据 while((data=file.read())!=-1){ //在while循环中使用read()方法持续读取file,数据赋到data中 //如果读取失败或者结束,则将返回-1,这个特殊的返回值可以作为读取结束的标识 System.out.print((char)data); //输出读取到数据 } file.close(); //一定要记得读取结束后要关闭文件
import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class Test { /** * 把输入流中的所有内容赋值到输出流中 * @param in * @param out * @throws IOException */ public void copy(InputStream in, OutputStream out) throws IOException { byte[] buf = new byte[4096]; int len = in.read(buf); //read 是一个字节一个字节地读,字节流的结尾标志是-1 while (len != -1){ out.write(buf, 0, len); len = in.read(buf); } } public static void main(String[] args) throws IOException { // TODO Auto-generated method stub Test t = new Test(); System.out.println("输入字符:"); t.copy(System.in, System.out); } }
随机读写:
类 RandomAccessFile 则允许文件内容同时完成读和写操作,它直接继承 Object,并且同时实现了接口 DataInput 和 DataOutput。
RandomAccessFile 提供了支持随机文件操作的方法:
readXXX()
或者writeXXX()
: 如readInt()
,readLine()
,writeChar()
,writeDouble()
等。int skipBytes(int n)
: 将指针向下移动若干字节。int length()
: 返回文件长度。long getFilePointer()
: 返回指针当前位置。void seek(long pos)
: 将指针调用所需位置。
在生成一个随机文件对象时,除了要指明文件对象和文件名之外,还需要指明访问文件的模式。
来看看 RandomAccessFile 的构造方法:
RandomAccessFile(File file,String mode) RandomAccessFile(String name,String mode)
mode 的取值:
r
: 只读,任何写操作都讲抛出 IOExceptionrw
: 读写,文件不存在时会创建该文件,文件存在是,原文件内容不变,通过写操作改变文件内容。rws
: 打开以便读取和写入,对于"rw"
,还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。rwd
: 打开以便读取和写入,对于"rw"
,还要求对文件内容的每个更新都同步写入到底层存储设备。