FileWriter 和FileReder的基础知识,和使用案例,使用FileInputStream和FileOutputStream完成文件的拷贝

//完成文件拷贝
//1.创建文件的输入流,将文件读入的程序
//2.创建文件的输出流,将文件输出到另一个文件
//在完成程序时,应该时读取部分数据,就写入到指定文件,这里使用循环操作

完成文件拷贝的java实例

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

/**
 * @ProjectName: Study
 * @FileName: FileCopy
 * @author:HWJ
 * @Data: 2023/5/19 16:49
 */
public class FileCopy {
    public static void main(String[] args) {
        //完成文件拷贝
        //1.创建文件的输入流,将文件读入的程序
        //2.创建文件的输出流,将文件输出到另一个文件
        //在完成程序时,应该时读取部分数据,就写入到指定文件,这里使用循环操作
        String secfilePath = "d:\\photo.jpg";
        String destfilePath = "d:\\exercise\\photo.jpg";
        FileInputStream fileInputStream = null;
        FileOutputStream fileOutputStream = null;
        try {
            fileInputStream = new FileInputStream(secfilePath);
            fileOutputStream = new FileOutputStream(destfilePath);
            byte[] buf = new byte[1024];
            int readLen = 0;
            //边读编写
            while((readLen = fileInputStream.read(buf)) != -1){
                fileOutputStream.write(buf, 0, readLen);
                //一定要使用这个方法
                //可能出现这个buf最后没读够的情况
            }
            System.out.println("copy成功");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (fileInputStream != null){
                    fileInputStream.close();
                }
                if (fileOutputStream != null){
                    fileOutputStream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

FileReader 和 FileWriter 介绍

FileReader 和 FileWriter是字符流,即按照字符来操作io,按照字符操作的类不能操作二进制文件。

类图

 

FileReader相关方法:

(1)new FileReader(File/String)

(2)read:每次读取单个字符,返回该字符,如果到文件末尾,返回-1

(3)read(char[]) 批量读取多个字符到数组,返回读取到的字符数,如果到文件末尾返回-1

相关API:

(1)new String(char[]) 将char[]转换成String

(2)new String(char[], off, len) 将char[]的指定部分转换成String   off偏移量

package Homework01.IO_;

import org.junit.jupiter.api.Test;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @ProjectName: Study
 * @FileName: FileReader_
 * @author:HWJ
 * @Data: 2023/5/19 17:28
 */
public class FileReader_ {
    public static void main(String[] args) {

    }
    @Test
    public void readFile01(){
        //1.创建一个FileReader对象
        int data = 0;
        String filePath = "d:\\exercise\\ex.txt";
        try {
            FileReader reader = new FileReader(filePath);
            //循环读取 使用read
            while((data = reader.read()) != -1){
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Test
    public void readFile02(){
        //1.创建一个FileReader对象
        int readLen = 0;
        char[] buf = new char[10];
        String filePath = "d:\\exercise\\ex.txt";
        try {
            FileReader reader = new FileReader(filePath);
            //循环读取 使用read(buf), 返回的是实际读到的字符数
            while((readLen = reader.read(buf)) != -1){

                //可能存在读取不够的情况,使用readLen保证输出有效长度的字符
                System.out.print(new String(buf, 0, readLen));
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

FileWriter相关方法:

(1)new FileWriter(File/String): 覆盖模式,相当于流的指针在首端;

(2)new FileWriter(File/String,true): 追加模式,相当于流的指针在尾端;

(3)write(int)写入单个字符

(4)write(char[])写入指定数组

(5)write(char[],off,len)写入指定数组的指定部分

(6)write(str)写入整个字符串

(7)write(str,off,len)写入指定字符串的指定部分

相关API:

String类: toCharArray:将String转换成char[]

注意:FileWriter使用后,在此之前数据还是在内存中,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。

package Homework01.IO_;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @ProjectName: Study
 * @FileName: FileWriter_
 * @author:HWJ
 * @Data: 2023/5/19 17:37
 */
public class FileWriter_ {
    public static void main(String[] args) {
        String filePath = "d:\\exercise\\ex05.txt";
        FileWriter writer = null;
        //创建FileWriter对象
        try {
            writer = new FileWriter(filePath);//默认是覆盖模式
            //第一种方式 write(int)写入单个字符
            writer.write('H');
            //第二种方式 write(char[])写入指定数组
            char[] chars = {'h','e','l','l','o'};
            writer.write(chars);
            //第三种方式 write(char[],off,len)写入指定数组的指定部分
            writer.write("风雨之后,定见彩虹".toCharArray(), 0, 4);
            //第四种方式  write(str)写入整个字符串
            writer.write(",定见彩虹");
            //第五种方式 write(str,off,len)写入指定字符串的指定部分
            writer.write("哈哈顶峰相见", 2, 4);
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                //FileWriter使用后,在此之前数据还是在内存中,必须要关闭(close)或刷新(flush),否则写入不到指定的文件。
                writer.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Studying~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值