大可制作:QQ群:31564239(asp|jsp|php|mysql)

Java Gossip: FileInputStream、 FileOutputStream

FileInputStream是InputStream的子类,由名称上就可以知道, FileInputStream主要就是从指定的文件中读取数据至目的地。

FileOutputStream是OutputStream的子类,顾名思义,FileInputStream主要就是从来源地写入数据至指定的文件中。

标准输入输出串流对象在程序一开始就会开启,但只有当您建立一个FileInputStream或FileOutputStream的实例时,实际的串流才会开启,而不使用串流时,也必须自行关闭串流,以释放与串流相依的系统资源。

下面这个程序可以复制文件,程序先从来源文件读取数据至一个位元缓冲区中,然后再将位元数组的数据写入目的文件:

  • FileStreamDemo.java
package onlyfun.caterpillar;

import java.io.*;

public class FileStreamDemo {
public static void main(String[] args) {
try {
byte[] buffer = new byte[1024];

FileInputStream fileInputStream =
new FileInputStream(new File(args[0]));
FileOutputStream fileOutputStream =
new FileOutputStream(new File(args[1]));

System.out.println("复制文件:" +
fileInputStream.available() + "位元组");

int length = -1;
// 从来源文件读取数据至缓冲区
while((length = fileInputStream.read(buffer)) != -1) {
// 将数组数据写入目的文件
fileOutputStream.write(buffer, 0, length);
}

// 关闭串流
fileInputStream.close();
fileOutputStream.close();

System.out.println("复制完成");
}
catch(ArrayIndexOutOfBoundsException e) {
System.out.println(
"using: java FileStreamDemo src des");
e.printStackTrace();
}
catch(IOException e) {
e.printStackTrace();
}
}
}

这个程序示范了两个 read() 方法,一个可以读入指定长度的数据至数组,一个一次可以读入一个位元组,每次读取之后,读取的指标都会往前进,您使用available()方 法获得还有多少位元组可以读取,在这边则是在进行读取前,使用available()来先取得总共可读取的位元数,也就是刚好等于文件大小;除了使用 File来建立FileInputStream、FileOutputStream的实例之外,您也可以直接使用字符串指定路径来建立。

不使用串流时,记得使用close()方法自行关闭串流,以释放与串流相依的系统资源。