您的位置:首页 > 编程语言 > Java开发

java输入输出流实例(FileInputStream、FileOutputStream实例)

2008-04-13 21:32 489 查看
[align=left]例1是使用FileInputStream与FileOutputStream的一个例子.程序可以复制文件,[/align]
[align=left]它会先从来源文件读取数据至一个byte数组中,然后再将byte数组的数据写入目的文件.[/align]
[align=left]例1 FileStreamDemo.java[/align]
[align=left]import java.io.*;[/align]
[align=left]public class FileStreamDemo {[/align]
[align=left] public static void main(String[] args) {[/align]
[align=left] try {[/align]
[align=left] // 来源文件[/align]
[align=left] FileInputStream in = new FileInputStream("D:/b.txt");[/align]
[align=left] // 目的文件[/align]
[align=left] FileOutputStream out = new FileOutputStream("C:/a.txt");[/align]
[align=left] byte[] bytearray = new byte[1024];[/align]
[align=left] do {[/align]
[align=left] in.read(bytearray, 0, 1024);[/align]
[align=left] out.write(bytearray);[/align]
[align=left] } while (in.available() > 0);[/align]
[align=left] in.close();[/align]
[align=left] out.close();[/align]
[align=left] } catch (ArrayIndexOutOfBoundsException e) {[/align]
[align=left] e.printStackTrace();[/align]
[align=left] } catch (IOException e) {[/align]
[align=left] e.printStackTrace();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]  程序中示范了两个read()方法,一个方法可以读入指定长度的数据至数组,另一个方法一次可以读入一个字节.每次读取之后,读取的光标都会往前进,如果读不到数据刚返回-1.使用available()方法可以获得还有多少字节可以读取.[/align]
[align=left]  在不使用文件流时,记得使用close()方法自行关闭流,以释放与流相依的系统资源.[/align]
[align=left]  FileOutputStream默认会以新建文件的方式来开启流.如果指定的文件名称已经存在,则原文件会被覆盖;如果想以附加的模式来写入文件,则可以在构建FileOutputStream实例时指定为附加模式.例如:[/align]
[align=left]  FileOutputStream fileOutputStream = new FileOutputStream(args[1],true);[/align]
[align=left]  构建方法的第二个append参数如果设定为true,在开启流时如果文件不存在则会新建一个文件,如果文件存在就直接开启流,并将写入的数据附加至文件末端.[/align]
[align=left]----------------------------------------------------------------------------------------------------------------------[/align]
[align=left]BufferedInputStream 和 BufferedOutputStream[/align]
[align=left]  java.io.BufferedInputStream与java.io.BufferedOutputStream可以为InputStream、OutputStream类的对象增加缓冲区功能,构建BufferedInputStream实例时,需要给定一个InputStream类型的实例,实现BufferedInputStream时,实际上最后是实现InputStream实例.同样地,在构建BufferedOutputStream时,也需要给定一个OutputStream实例,实现BufferedOutputStream时,实际上最后是实现OutputStream实例.[/align]
[align=left]  BufferedInputStream的数据成员buf是一个位数组,默认为2048字节,BufferedOutputStream的数据成员buf 也是一个位数组,默认为512字节.[/align]
[align=left]例2是对例1的改写,不用自行设定缓冲区,比较简单且有效率.[/align]
[align=left]例2 BufferedStreamDemo.java[/align]
[align=left]import java.io.*;[/align]
[align=left]public class FileStreamDemo {[/align]
[align=left] public static void main(String[] args) {[/align]
[align=left] try {[/align]
[align=left] // 来源文件[/align]
[align=left] FileInputStream in = new FileInputStream("D:/b.txt");[/align]
[align=left] // 目的文件[/align]
[align=left] FileOutputStream out = new FileOutputStream("C:/a.txt");[/align]
[align=left] BufferedInputStream bufferedIn = new BufferedInputStream(in);[/align]
[align=left] BufferedOutputStream bufferedOut = new BufferedOutputStream(out);[/align]
[align=left] byte[] data = new byte[1];[/align]
[align=left] while (bufferedIn.read(data) != -1) {[/align]
[align=left] bufferedOut.write(data);[/align]
[align=left] }[/align]
[align=left] //将缓冲区中的数据全部写出[/align]
[align=left] bufferedOut.flush();[/align]
[align=left] //关闭流[/align]
[align=left] bufferedIn.close();[/align]
[align=left] bufferedOut.close();[/align]
[align=left] } catch (ArrayIndexOutOfBoundsException e) {[/align]
[align=left] e.printStackTrace();[/align]
[align=left] } catch (IOException e) {[/align]
[align=left] e.printStackTrace();[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left]  为了确保缓冲区中的数据一定被写出至目的地,建议最后执行flush()将缓冲区中的数据全部写出目的流中,这个范例的执行结果与例1的执行结果是相同的.[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: