Java输入/输出流(2)

一、FileInputStream与FileOutputStream

        FileInputStream和FileOutputStream都是用来处理二进制数据源磁盘文件的流。 他们分别派生自顶层抽象类InputStream和OutputStream。

1、FileInputStream

        作用:用于从文件系统中的某个文件中获得输入字节,处理二进制原始字节文件,如exe 、jpg等。

(1)构造关联的文件可以使用 String 描述,也可以使用File ,FileDescriptor 对象表示 。

(2)read 是可能阻塞当前线程的。当read等其他操作的字节数大于此对象直接可用(available)的字节数时会阻塞。

(3)read到文件末尾返回 -1

表1 FileInputStream常用方法
方法说明

FileInputStream(File file) 

通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 

FileInputStream(String name)

通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的路径名 name 指定。 

FileInputStream(FileDescriptor fdObj) 

通过使用文件描述符 fdObj 创建一个 FileInputStream,该文件描述符表示到文件系统中某个实际文件的现有连接。 

int read() 

从此输入流中读取一个数据字节

int read(byte[] b)

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

int read(byte[] b, int offset, int len) 

从此输入流中将最多 len 个字节的数据读入 byte 数组b中,offset表示偏移量,len是最多读取的字节数

 void close() 

关闭此文件输入流并释放与此流有关的所有系统资源。

long skip(long n)

从输入流中跳过并丢弃 n 个字节的数据。

2、FileOutputStream 

        作用:用于将字节(二进制)数据写入关联的文件中。

(1)构造时关联的文件可以使用 String 描述路径,或者使用File ,FileDescripter类对象。

(2)append 为true 时,表示要对文件进行追加输入操作,则将字节写入文件末尾处,而不是写入文件开始处。

(3)如果文件不存在,则会先创建文件。表示追加,append为true时,也是如此。当append为false,且文件已经存在,则是本次读写覆盖文件原来的内容。

表2 FileOutputStream常用方法
方法说明

FileOutputStream(File file)

FileOutputStream(File file, boolean append)

创建一个向指定 File 对象表示的文件中写入数据的文件输出流。
FileOutputStream(FileDescriptor fdObj)创建一个向指定文件描述符处写入数据的输出文件流,该文件描述符表示一个到文件系统中的某个实际文件的现有连接。

FileOutputStream(String name)

FileOutputStream(String name, boolean append)

创建一个向具有指定名称的文件中写入数据的输出文件流。
void write(int b)将指定字节写入此文件输出流。
void write(byte[] b)将 b.length 个字节从指定 byte 数组写入此文件输出流中。
void write(byte[] b, int offset, int len)将指定 byte 数组中从偏移量 offset 开始的 len 个字节写入此文件输出流。
void flush() 刷新输出的数据在内存中的缓冲,强制数据写出到底层文件中。执行close时,会自动flush。
void close()关闭此文件输出流并释放与此流有关的所有系统资源。

示例代码:使用FileInputStream和FileOutputStream实现文件的复制

package Study.IOStream_Study;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy {
    public static void main(String[] args) throws IOException {
        //1.创建文件输入流,将文件读入程序
        //2.创建文件输出流,
        //文件1---输入流--->java程序---输出流--->文件2
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        fileInputStream = new FileInputStream("e:111.JPG");
        fileOutputStream = new FileOutputStream("d:\\111.JPG");
        byte[] buf = new byte[1024];
        int readLen = 0;
        //边读边写
        while((readLen=fileInputStream.read(buf))!=-1){
            fileOutputStream.write(buf,0,readLen);//必须这个方法
        }
        System.out.println("拷贝成功");
        if(fileInputStream!=null)
            fileInputStream.close();
        if(fileOutputStream!=null)
            fileOutputStream.close();
    }
}

二、 FileReader与FileWriter

1、FileReader

        FileReader类继承自InputStreamReader类。 FileReader用于读取字符流。

表3 FileReader常用方法
方法说明
FileReader(File file)此构造函数由给定要读取的文件来创建一个新的FileReader对象。
FileReader(FileDescriptor fd)此构造函数由给出要读取的FileDescriptor来创建一个新的FileReader对象。
FileReader(String fileName)此构造函数由给定要读取的文件的名称来创建一个新的FileReader对象。
public int read() 读取单个字符。
读取的字符,如果已到达流的末尾,则返回 -1
public int read(char[] buf)读取一个字符数组
读取的字符,如果已到达流的末尾,则返回 -1
public void close()关闭该流并释放与之关联的所有资源

示例代码:

public static void main(String[] args) throws Exception {
    //读取当前项目下的StringDemo.java文件
    FileReader fr = new FileReader("StringDemo.java")
    //一次读取一个字符数组
    char[] chs = new char[1024] ;
    int len = 0 ;
    while((len=fr.read(chs))!=-1) {
        System.out.println(new String(chs,0,len));
    }
        
    //释放资源
    fr.close();
}

2、FileWriter

        FileWriter类继承自OutputStreamWriter类。 FileWriter用于写入字符流。

表4 FileWriter常用方法
方法说明
public FileWriter(String fileName)根据给定的文件名构造一个 FileWriter 对象。
fileName - 一个字符串,表示与系统有关的文件名。
public FileWriter(String fileName,boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
fileName - 一个字符串,表示与系统有关的文件名。
append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。
public FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
file - 要写入数据的 File 对象。
public void write(int c)写单个字符
public void write(char[] buf)写字符数组
public void write(String str)写字符串
public void write(String str,int off, int len)写字符串的某一部分
public void flush() 刷新该流的缓冲。
public void close() 刷新并关闭此流。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值