输入输出处理
- java的输入输出是由一组类来实现的。能读取数据的对象叫输入流,能向其写入数据的对象叫输出流
* 一、File类
* File类与InputStream / OutputStream类同属于一个包,它不允许访问文件内容。
File类主要用于命名文件、查询文件属性和处理文件目录。
* 二、 InputStream类和 OutputStream类 (输入输出流)
* 1、它们都是抽象类,不能创建对象;2、必须通过其子类实现实例化。
* 1)InputStream类的常用方法
* 1. public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。
2. public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的。
3. public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。
* 4. public int available( ):返回输入流中可以读取的字节数。注意:若输入阻塞,当前线程将被挂起。
5. public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数。
6. public int close( ) :关闭输入流。
*2)OutputStream类的常用方法
* 1. public void write(byte b[ ]):将参数b中的字节写到输出流。
2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。
3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。
* 4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。
5. public void close( ) : 关闭输出流并释放与流相关的系统资源。
ps:1. 上述各方法都有可能引起异常。
2. InputStream和OutputStream都是抽象类,不能创建这种类型的对象。
*三、FileInputStream类 和FileOutputStream类 (文件输入输出流)
*FileInputStream类是InputStream类的子类,用来处理以文件作为数据输入源的数据流。
*创建一个文件流对象有两种方法:
*方式1:
File fin=new File(“d:/abc.txt”);
FileInputStream in=new FileInputStream(fin);
方式2:
FileInputStream in=new
FileInputStream(“d: /abc.txt”);
*(FileOutputStream类似)
*ps:1、在向文件中写数据时,若文件已经存在,则覆盖存在的文件;若文件不存在,则自动创建一个文件。
2、当流的读/写操作结束时,应调用close方法关闭流。
*四、 DataInputStream和DataOutputStream类 (数据输入输出流)
*DataInputStream类对象可以读取各种类型的数据,而DataOutputStream类对象可以写各种类型的数据;
创建这两类对象时,必须使新建立的对象指向构造函数中的参数对象。例如:
*FileInputStream in=new FileInputStream(“d:/abc.txt”);
DataInputStream din=new DataInputStream(in);
*1)DataInputStream类的常用方法
*1.public final int skipBytes(long n): 跳过输入流中n个字节的数据。
2.public final byte readByte( ):从输入流中读取1个字节的数据。
3.public final char readChar( ):从输入流中读取1字符的数据。
4.public final int readInt( ):从输入流中读取4字节的数据。
*5.public final long readLong( ):从输入流中读取8字节的数据。
6.public final String readLine( ):从数据输入流中读取一行,并且包括换行符。
7.public final void readFully(byte b[ ]):从数据输入流中读取b.length 个字节的数据,读到b数组中。
*2)DataOutputStream类 的常用方法
*1. public final int size( ):返回写到输出流中的字节数。
2. public final void writeBytes(String s):将字符串s中的字符写到输出流中,写时忽略高8位。
3. public final void writeChars(String s):将字符串s中的字符写到输出流中。
4. public final void writeInt(int v):将参数v按4个字节的形式写到输出流中。
*五、 RandomAccessFile类 (随机访问流)
*RandomAccessFile类实现了DataOutput和DataInput接口,可用来读写各种数据类型。它有两个构造函数:
*1. public RandomAccessFile( String name, String mode )
2. public RandomAccessFile( File file, String mode )
mode的取值只能为“r”,或 “rw”。若是其它模式则抛出异常IllegalArgumentException。
*六、ObjectOutputStream类和ObjectInputStream类(对象输入输出流)
*ObjectOutputStream类的writeObject( )方法可以写入对象,数组字符串是对象,但基本类型的变量,必须通过DataOutput中的writeInt方法写入。 例如
*ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(“t.tmp”));//与数据流的构造函数形式差不多。
out.writeInt(12345);
out.writeObject(“Today”); // 写对象
out.writeObject(new Date( )); // 写对象
* out.flush(); //刷新缓冲区
* out.close();
* 七、对象序列化
* 序列化机制允许将实现序列化的Java对象转换成字节序列 ,这些字节序列可以被保存在磁盘上,或者通过网络传输,以备以后重新恢复成原来的对象。