JAVA: FileInputStream、FileOutputStream 类,详解

输入与输出

我们编写的程序除了自身会定义一些数据信息外,经常还会引用外界的数据,或是将自身的数据发送到外界。比如,我们编写的程序想读取一个文本文件,又或者我们想将程序中的某些数据写入到一个文件中,这时我们就要使用输入与输出。

输入:输入是一个从外界进入到程序的方向,通常我们需要"读取"外界的数据时,使用输入。所有输入是用来读取数据的。

输出:  输出是一个从程序发送到外界的方向,通常我们需要"写出"数据到外界时,使用输出。所以输出是用来写出数据的。

节点流与处理流

按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。

节点流:可以从或向一个特定的地方(节点)读写数据。

处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。

处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的连接。

通常节点流也称为低级流。

通常处理流也称为高级流或过滤流。

IS和OS常用方法

InputStream是所有字节输入流的父类,其定义了基础的读取方法,常用的方法如下:

int read()

读取一个字节,以int形式返回,该int值的"低八位"有效,若返回值为-1则表示EOF

int read(byte[] d)

尝试最多读取给定数组的length 个字节并存入该数组,返回值为实际读取到的字节量。

 IS和OS常用方法

OutputStream是所有字节输出流的父类,其定义了基础的写出方法,常用的方法如下:

void write(int d)

写出一个字节,写出是给定的int的"低八位"

void writer(byte[] d)

将给定的字节数组中的所有字节全部写出

文件流

FileOutputStream是文件的字节输出流,我们使用该流可以以字节为单位将数据写出文件。

构造方法:

FileOutputStream(File file):

创建一个向指定File对象表示的文件中写出数据的文件输出流。

FileOutputStream(String filename):

创建一个向具有指定名称的文件中写出数据的文件输出流。

这里需要注意,若指定的文件已经包含内容,那么当使用FOS对其写入数据时,会将该文件中原有数据全部清除。

测试构建FOS对象写文件

//创建文件字节输出流

FileOutputStream fos=new FileOutputStream("fos.dat");

//写出一组字节

fos.write("helloworld".getBytes());

fos.close();

创建FOS对象(追加模式)

通过上一节的构造方法创建的FOS对文件进行写操作时会覆盖文件中原有数据。若想在文件的原有数据之后追加新数据则需要以下构造方法创建FOS

构造方法:

FileOutputStream(File file,boolean append)

创建一个向指定File对象表示的文件中写出数据的文件输出流。

FileOutputStream(String filename,boolean append)

创建一个向具有指定名称的文件中写出数据的文件输出流。

以上两个构造方法中,第二个参数若为true,那么通过该FOS写出的数据都是在文件末尾追加的。

//创建文件字节输出流

FileOutputStream fos=new FileOutputStream(new File("fos.dat"),true);

//写出一组字节

fos.write("helloworld".getBytes());

fos.close();

创建FIS对象

FileInputStream是文件的字节输入流,我们使用该流可以以字节为单位从文件中读取数据。

FileInputStream有两个常用的构造方法:

FileInputStream(File file)

创建一个从指定File对象表示的文件中读取数据的文件输入流。

FileInputStream(String name)

创建用于读取给定的文件系统中的路径名name所指定的文件的文件输入流

FileInputStream fis=new FileInputStream("raf.dat");

int d=-1;

while((d=fis.read())!=-1){

System.out.print((char)d+" ");

}

fis.close();

read()和write(int d)方法

实现文件复制

FileInputStream fis=new FileInputStream("fos.dat");

FileOutputStream fos=new FileOutputStream("fos_copy1.dat");

int d=-1;

while((d=fis.read())!=-1){

fos.write(d);

}

System.out.println(“复制完毕!”);

fis.close();

fos.close();

read(byte[] d)和write(byte[] d)方法

FileInputStream也支持批量读取字节数据的方法:

int read(byte[] b)

从此输入流中将最多b.length个字节的数据读入到字节数组b中

FileOutputStream也支持批量写出字节数据的方法:

void write(byte[] d)

将b.length个字节从指定byte数组写入此文件输出流中。

void write(byte[] d,int offset,int len)

将指定byte数组中从偏移量off开始的len个字节写入此文件输出流。

实现文件复制

FileInputStream fis=new FileInputStream("fos.dat");

FileOutputStream fos=new FileOutputStream("fos_copy2.dat");

int len=-1;

byte[] buf=new byte[32];

while((len=fis.read(buf))!=-1){

fos.write(buf,0,len);

}

System.out.println(“复制完毕!”)

fis.close();

fos.close();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值