案例:完成文件的复制操作
功能分解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(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本