FileInputStream和FileOutputStream分别表示读写文件数据流,前者是将文件数据读取到内存中,后者表示将内存中的数据写入到文件中。
1.FileInputStream
FileInputStream从文件系统中的文件中获得输入的字节数据。主要的构造方法有以下三种:
FileInputStream(File file)
用File对象来构造
FileInputStream(String pathName)
用文件路径名来构造
FileInputStream(FileDescriptor fdObj)
以文件描述符类对象来构造
主要的方法和InputStream类似。其他方法如下所示:
FileChannel getChannel()
获得该文件输入流唯一的文件通道对象
FileDescriptor getFD()
获得被文件输入流使用的文件的文件描述符对象
2.FileOutputStream
FileOutputStream是一个向文件(File)中或者文件描述符(FileDescriptor)中写入数据的输出流。文件是否可用或者可创建取决于底层平台。在某些平台中,允许文件在某一个时刻仅仅被一个文件输出流进行写操作。在这种情况下,用已经被使用的文件来构造文件输出流将会发生错误。文件输出流是用来写原始字节数据的,例如图片数据;如果要写入字符数据,可以考虑使用FileWriter类。如果该文件找不到,则会自动创建该文件,前提是允许创建,否则将会出现文件找不到错误。如果该文件找到,但是是文件夹而不是常规文件,则也会发生文件找不到错误,如果该文件不允许打开,也会发生错误。
主要的构造方法有以下几种:
FileOutputStream(File file)
用File对象来构造,写文件时,从头开始写
FileOutputStream(File file,boolean append)
用File对象来构造,如果第二个参数为true,则表示以追加的方式写文件,从尾部开始写操作。第二个参数默认为false。
FileOutputStream(FileDescriptor fdObj)
用文件描述符来构造
FileOutputStream(String path)
用文件路径名来构造,写文件时,从头开始写
FileOutputStream(String path,boolean append)
用文件路径名来构造,如果第二个参数为true,写文件时,从尾部开始写,以追加的形式写文件。第二个参数默认为false。
常用的方法和OutputStream类似。其他方法如下所示:
FileChannel getChannel()
获得该文件输入流唯一的文件通道对象
FileDescriptor getFD()
获得被文件输入流使用的文件的文件描述符对象
下面是某图像读写操作的java代码:
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileTest {
/*
* 先读取图片数据,然后将该图片写到其他路径中
*/
public static void main(String[] args) throws IOException{
String image = "G:\\test.jpg"; //源文件路径
String goalPath = "E:\\follow.jpg"; //目标文件路径
FileInputStream fis = new FileInputStream(image); //初始化输入流
FileOutputStream fos = new FileOutputStream(goalPath);
int len=fis.available(); //流中字节数
System.out.println("图片大小为:"+len+"个字节");
int ch=0; //一个字节一个字节读
while((ch = fis.read()) != -1){
fos.write(ch); //一个字节一个字节写
}
}
}
原始文件截图:
程序运行结果截图:
可以看出,读取的文件的大小和文件属性中查看的是一致的,都是9811字节写入的图片文件截图: