比较常用的有FileInputStream、BufferedInputStream、DataInputStream还有FileOutputStream、BufferedOutputStream、DataOutputStream。以下是字符流:
对于输入流与输出流,Buffered的速度要快很多,所以一般用Buffered的对象。
先上几段代码,看过后,对流的操作基本就熟悉了。
以下代码实现从键盘中读入字符然后写入文件:
//创建一个输入流,读取键盘的输入。
BufferedReader r=new BufferedReader(new InputStreamReader(System.in));
try {
//创建缓存过的输出流,经过好几层封装
BufferedOutputStream w=new BufferedOutputStream(new FileOutputStream("f://temp.txt"));
//将字符串转变为字节数组(String的getBytes()方法)
w.write(r.readLine().getBytes());
//将缓存中的数据写入到文件中,其实这一句在这里作用不大,因为当w执行close的时候会自动实现这个功能。
w.flush();
w.close();
r.close();
//对于文件操作,异常处理是必不可少的,不过这里可以用Exception替代所有异常。
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
下面这段代码实现文件的拷贝:
try {
//创建Buffered的输入、输出流
BufferedInputStream r=new BufferedInputStream(new FileInputStream("f://金秋读书节成品.wmv"));
BufferedOutputStream w=new BufferedOutputStream(new FileOutputStream("e://金秋读书节成品.wmv"));
//创建缓冲区
byte[] buff=new byte[1024];
//read的返回值很关键,如果为-1,说明程序已到结尾
while(r.read(buff)!=-1)
{
w.write(buff);
}
r.close();
w.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
由上面代码可以看到以下的封装关系:
除了以上的流,还有几个典型的流:
数据流:DataInputStream、DataOutputStream
对象流(序列化使用):ObjectInputStream、ObjectOutputStream