Java(文件输入/输出字节流)

52 篇文章 0 订阅

InputStream和OutputStream都是抽象类,不能实例化,因此在实际应用中使用的都是他们的子类,这些子类在实现其超类方法的同时由定义了特有的功能,用于不同的场合。例如,文件数据流类FileInputStream和FileOutputStream可用于对文件的输入输出处理。

1.FileInputStream
用于顺序读取本地文件。从超类继承read(),close()等方法,对文件进行操作,
构造函数
FileInputStream(String filepath)
FileInputStream(File fileObj)
当指定文件在文件系统不存在时,它们都能引发FileNotFoundException异常。这里,filepath,是文件的全称路径,fileObj是描述文件的File对象。设有一个文件,名称为Test.java,可以用于下面的代码构造文件输入流
FileInputStream f1=new FileInputStream(“Test.java”);
或者先构造File对象,再用File对象构造输入流
File f=new File(“Test.java”);
FileInputStream f2=new FileInputStream(f);

FileInputStream重写了抽象类InputStream读取数据的方法
public int read()
从此输入流中读取一个数据字节。

public int read(byte[] b)
在此流中最多将b.length个字节的数据读入字节数组中
public int read(byte[] b,int off,int len)
在此输入流中将最多len个字节的数据读入一个字节数组中。
这些方法在读取数据时,遇到输入流结束则返回-1.

2.FileOutputStream
用于向一个文件写数据。它从父类中继承了write(),close()等方法。
构造函数
FileOutputStream(String filepath)
FileOutputStream(File fileObj)
FileOutputStream(String filePath,boolean append)
FileOutputStream(File fileObj,boolean append)

它们可以引发IOException或SecurityException异常。这里filePath是文件的全称路径,fileObj是描述该文件的File对象,如果append为true,文件以追加方式打开,不覆盖已有的内容,如果为false,则覆盖原文的内容,只有一个参数的时候,则覆盖文件的内容。
FileOutputStream的创建不依赖文件是否存在。如果filePath表示的文件不存在,FileOutputStream在打开之前创建它,如果文件已经存在,则打开它,准备写。若试图打开一个只读文件,则会引发一个IOException异常。
FileOutputStream重写了抽象类,OutputStream写数据的方法
public void write(byte[] b)将b.length个字节从指定字节数组写入此文件输出流中。
public void write(byte[] b,int off ,int len)
将指定字节数组中从偏移量off开始的len个字节写入此文件输出流中。
public void write(int b)将指定字节写入此文件输出流。

import java.io.*;

public class FileStreamCopy {
    public static void main(String[] args) throws IOException{
        int size;
        FileInputStream f=new FileInputStream("C:/Users/JACK_JYH/workspace/Test/src/Main/FileStreamCopy.java");
        FileOutputStream fout=new FileOutputStream("C:/Users/JACK_JYH/workspace/Test/src/copy-of-file.txt");
        System.out.println("Total Available Bytes:"+(size=f.available()));
        int n=size/30;
        for(int i=0;i<n;i++)
        {
            fout.write(f.read());
        }
        System.out.println("Still Available:"+f.available());
        System.out.println("Reading the next "+n+" with one read(b[])");
        byte b[]=new byte[n];
        if(f.read(b)!=n)
        {
            System.err.println("couldn't read"+n+" bytes");
        }
        fout.write(b);
        System.out.println("Still Available:"+f.available());
        System.out.println("Reading the rest bytes with read(b[],offset,len)");
        int count=0;
        while((count=f.read(b,0,n))!=-1)
            fout.write(b,0,count);
        System.out.println("Still Available:"+f.available());
        f.close();
        fout.flush();
        fout.close();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值