FileInputStream是InputStream的子类,由名称上就可以知道, FileInputStream主要就是从指定的文件中读取数据至目的地。
FileOutputStream是OutputStream的子类,顾名思义,FileInputStream主要就是从来源地写入数据至指定的文件中。
标准输入输出串流对象在程序一开始就会开启,但只有当您建立一个FileInputStream或FileOutputStream的实例时,实际的串流才会开启,而不使用串流时,也必须自行关闭串流,以释放与串流相依的系统资源。
下面这个程序可以复制文件,程序先从来源文件读取数据至一个位元缓冲区中,然后再将位元数组的数据写入目的文件:
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()方法自行关闭串流,以释放与串流相依的系统资源。 |
|