java.io包提供所有关于输入和输出的接口和类。
InputStream和OutputStream为字节流的输入输出类,是所有面向字节的输入输出流父类。
Reader和Write为字符流的输入输出类,是所有面向字符的输入输出流的父类。字符流用于存储和检索文本,以Unicode字符为单位进行读写。当写入一个16位的Unicode字符时,按字节分为两部分,先写高位字节,后写低位字节。
File和RandomAccessFile为对文件操作的类。File类记载文件信息并以顺序方式访问文件,RandomAccessFile类以随机方式访问文件。
×××××××××××××××××××××××××××××××××××××××××××××××××××××××
InputStream中的read()方法有一个被定义为abstract int read(),为什么被定义为抽象方法呢?主要是为了让继承InputStream类的子类可以针对不同的外部设备定义不同的read()方法。
java规定read()方法必须配合异常处理机制来使用,所以当用户使用read()方法时,必须加入IOException来执行异常处理,或是利用try-catch来执行错误控制。
从键盘读取一个字符的程序:
import java.io.*;
public class ReadKeyboard{
public static void main(String args[])throws IOException{
int a;
System.out.print("please input a character:");
a=(char)System.in.read();
System.out.println("The character you input is:"+(char)a);
}
}
×××××××××××××××××××××××××××××××××××××××××××××××
下面这个程序说明FileInputStream的用法:
import java.io.*;
public class OpenFile{
public static void main(String []args){
try{
FileInputStream fis=new FileInputStream("OpenFile.java");
int n=512;
byte buffer[]=new byte[n];
while((fis.read(buffer,0,n)!=-1)&&(n>0)){
System.out.print(new String(buffer));
}
System.out.println();
fis.close();
}
catch(IOException ioe){ System.out.println(ioe); }
catch(Exception e){ System.out.println(e); }
}
}
×××××××××××××××××××××××××××××××××××××××××××××××
下面一个程序说明write方法的标准输出的用法:将A输出到屏幕
import java.io.*;
public class WriteDemo{
public static void main(String[] args){
char a='A';
System.out.write(a);
System.out.write('\n');
}
}
其它基本一样,不再赘述。
××××××××××××××××××××××××××××××××××××××××××××××××
过滤流:
java可以把两种类结合在一起构成过滤流,其方法就是使用一个已经存在的流构造另一个流。例如,如果想从一个文件中读取数字,可以先创建一个FileInputStream,然后把该类传递给一个DataInputStream的构造函数,如下:
FileInputStream fis=new FileInputStream("write.txt");
DataInputStream dis=new DataInputStream(fis);
double d=dis.readDouble()
****************************************************************
对象流:
将对象存取自一个流成为序列化(serialization),为了完成对象的序列化,这些对象需要符合以下几个条件:类需要实现Serializable接口(许多java标准类都是);若有数据不是可序列化的或不需要写出的(例如一些敏感而不想暴露的数据),则需将其声明为transient。