案例:完成文件的复制操作

功能分解1:文件---》FileReader

一个字符一个字符将文件中的内容读取到程序中了

复制代码
package com.msb.io01;

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

/**
 * @author : liu
 * 日期:16:11:47
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test01 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) throws IOException {
        //文件--》程序
        //1.有一个具体的文件:--->创建一个File对象
        File f=new File("d:\\test.txt");
        //2.利用FileReader这个流,这个管怼到源文件上去---》创建一个FileReader的流的对象
        FileReader fr=new FileReader(f);
        //3.进行操作“吸”的动作--》读取动作
        //下面的代码我们验证了:如果到了文件的结尾处,那么读取的内容为-1
        /*int n1 = fr.read();
        int n2 = fr.read();
        int n3 = fr.read();
        int n4 = fr.read();
        int n5 = fr.read();
        int n6 = fr.read();
        System.out.println(n1);
        System.out.println(n2);
        System.out.println(n3);
        System.out.println(n4);
        System.out.println(n5);
        System.out.println(n6);*/
        //方式1:
        /*int n = fr.read();
        while (n!=-1){
            System.out.println(n);
            n=fr.read();
        }*/
        //方式2:
        int l;
        while((l=fr.read())!=-1){
            System.out.println((char) l);
        }
        //4.“管”不用了,就要关闭---》关闭流
        //流,数据库,网络资源靠jvm本身没法帮我们关闭,此时必须程序员手动关闭:
        fr.close();
    }

}
复制代码

想一次性读取5个字符,不够的话下次在读五个字符:

复制代码
package com.msb.io01;

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

/**
 * @author : liu
 * 日期:16:43:47
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test02 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) throws IOException {
        //文件--》程序
        //1.创建一个File对象
        File f=new File("d:\\test.txt");
        //2.创建一个FileReader的流的对象
        FileReader fr = new FileReader(f);
        //3.读取动作
        //引入一个“快递员的小车”,这个“小车”一次拉5个快递
        char[] ch=new char[5];//缓冲数组
        int len = fr.read(ch);//一次读取五个:返回值是这个数组中有效的长度
        while (len!=-1){
            //错误方式
            /*for (int i = 0; i < ch.length; i++) {
                System.out.println(ch[i]);
            }*/
            //正确方式
            /*for (int i = 0; i < len; i++) {
                System.out.println(ch[i]);
            }*/
            //正确方式将数组专为String类型
            String s=new String(ch,0,len);
            System.out.print(s);
            len= fr.read(ch);
        }

        //4.关闭流
        fr.close();
    }
}
复制代码

功能分解2:程序---》文件:feilwriter

一个字符一个字符的向外输出:

复制代码
public class Test03 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) throws IOException {
        //1.有一个目标文件
        File f=new File("d:\\demo.txt");
        /*if (f.exists()){
            f.createNewFile();
        }*/
        //2.filewriter
        FileWriter fw=new FileWriter(f);
        //3.开始动作:输出动作
        //一个字符一个字符的往外输出
        String str="abc";
        for (int i = 0; i < str.length(); i++) {
            fw.write(str.charAt(i));
        }
        fw.close();
    }
}
复制代码

发现:

如果目标文件不存在的话,那么会自动创建此文件

如果目标文件存在的话

new FileWriter(f)相当于对源文件进行覆盖操作。

FileWriter fw=new FileWriter(f,false);相当于对源文件进行覆盖操作,不是追加

FileWriter fw=new FileWriter(f,true);相当于对源文件进行追加操作,而不是覆盖

 

利用缓冲数组向外输出:

复制代码
package com.msb.io01;

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

/**
 * @author : liu
 * 日期:17:15:34
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test03 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) throws IOException {
        //1.有一个目标文件
        File f=new File("d:\\demo.txt");
        FileWriter fw=new FileWriter(f,true);
        //3.开始动作:输出动作
        String str="hello\n";
        char[] chars = str.toCharArray();
        fw.write(chars);
        fw.close();
    }
}
复制代码

利用fileReader,fileWriter文件复制

复制代码
package com.msb.io01;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author : liu
 * 日期:08:11:44
 * 描述:IntelliJ IDEA
 * 版本:1.0
 */
public class Test04 {
    //这是一个main方法:是程序的入口
    public static void main(String[] args) throws IOException {
        //1.有一个源文件
        File f1=new File("d:\\test.txt");
        //2.有一个目标文件
        File f2=new File("d:\\Demo.txt");
        //3.输入对象
        FileReader fr=new FileReader(f1);
        //4.输出对象
        FileWriter fw=new FileWriter(f2,true);
        //5.开始复制操作
        //方式1:一个字符一个字符的复制
        /*int read = fr.read();
        while (read!=-1){
            fw.write(read);
            read=fr.read();
        }*/
        //方式2:利用缓冲数组赋值
        //创建缓冲数组
        /*char[] ch=new char[5];
        //按顺序将字符一次写入数组
        int read = fr.read(ch);
        while(read!=-1){
            //read为数组的实际长度必须加上
            fw.write(ch,0,read);
            read =fr.read(ch);
        }*/
        //方式3将数组专为字符串写入
        char[] ch=new char[5];
        int read = fr.read(ch);
        while (read!=-1){
            //先转换字符串也可以
            String st=  new  String(ch,0,read);
            fw.write(st);
            read=fr.read(ch);
        }
        //6.关闭流
        fw.close();
        fr.close();
    }
}
复制代码

 

posted @   爱的加勒比  阅读(68)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示