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

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

 

原创粉丝点击