本文主要是介绍IO流之字符流实战,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
IO流(一)字符流
- 一、IO流是什么?
- 二、File类
- 三、引入IO流
- 四、代码演示
- 例题:通过java程序完成文件的复制操作
- 从文件中读取数据(一个一个读)
- 向文件中写入数据(一个一个写)
- 利用缓冲数组读取
- 利用缓冲数组输出
- 利用FileReader,FileWriter进行文件复制
- 正片开始!!!
- 五、使用IO流建议
- 总结
一、IO流是什么?
我们在初学Java的时候通常都使用控制台达成需求,但是我们写入的数据的作用域只存在于控制台,数据随着程序执行完毕就消失了,等下一次再运行程序的时候需要重新写入数据,IO流的作用可以将程序中的数据永久的保存到一个数据源中。
二、File类
File类:封装文件/目录的各种信息,对目录/文件进行操作,但是我们 不可以获取到文件/目录中的内容。
File类就是上文提到的数据源,因为我们刚开始使用IO流通常都会将数据写到一个记事本文件里,
File就是将这个文件封装到File中再用IO流进行操作,一下是File的实例化以及一些方法,不过多演示,有兴趣的话可以将代码复制到IDEA中去感受一下。
public static void main(String[] args) {//将目录封装为File类的对象:File f = new File("D:\\IDEA_workspace");System.out.println("文件是否可读:"+f.canRead());System.out.println("文件是否可写:"+f.canWrite());System.out.println("文件的名字:"+f.getName());System.out.println("上级目录:"+f.getParent());System.out.println("是否是一个目录:"+f.isDirectory());System.out.println("是否是一个文件:"+f.isFile());System.out.println("是否隐藏:"+f.isHidden());System.out.println("文件的大小:"+f.length());System.out.println("是否存在:"+f.exists());System.out.println("绝对路径:"+f.getAbsolutePath());System.out.println("相对路径:"+f.getPath());System.out.println("toString:"+f.toString());
三、引入IO流
I/O : Input/Output的缩写,用于处理设备之间的数据的传输。
形象理解:IO流 当做一根 “管”
四、代码演示
例题:通过java程序完成文件的复制操作
从文件中读取数据(一个一个读)
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.进行操作“吸”的动作 ---》读取动作int n = fr.read(); //读取程序中的数据while(n!=-1){System.out.println(n); //循环读取,打印到控制台n = fr.read();}//4.关闭流//流靠虚拟机本身没有办法帮我们关闭,此时必须程序员手动关闭:fr.close();}
向文件中写入数据(一个一个写)
public static void main(String[] args) throws IOException {//1.有个目标文件:File f = new File("d:\\demo.txt");//2.创建一个FileWriter的流的对象,利用这个对象,将这个“管”连接到数据源上去FileWriter fw = new FileWriter(f);//3.开始动作:输出动作://一个字符一个字符的往外输出:String str = "hello你好";//因为字符串的底层逻辑是char类型数组,所以字符串可以获得到长度for (int i = 0 ;i < str.length();i++){ fw.write(str.charAt(i));}//4.关闭流:fw.close();}
利用缓冲数组读取
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.读取动作char[] ch = new char[50];//缓冲数组int len = fr.read(ch);//一次读取50个:返回值是这个数组的有效长度while(len!=-1){//如果读取动作结束后数组里有东西,也就是有效长度不是-1//方式1:/*for (int i = 0 ;i < len;i++){System.out.println(ch[i]);}*///正确方式2:将数组转为String:(建议使用)String str = new String(ch,0,len);System.out.print(str);len = fr.read(ch);//重新读取下一次}//4.关闭流fr.close();}
利用缓冲数组输出
public static void main(String[] args) throws IOException {//1.有个目标文件:File f = new File("d:\\demo.txt");//2.创建一个FileWriter的流的对象,利用这个对象,将这个“管”连接到数据源上去FileWriter fw = new FileWriter(f,true);//3.开始动作:输出动作:char[] ch = new char[50];int len = fr.read(ch);while(len!=-1){String s = new String(ch,0,len);fw.write(s);len = fr.read(ch);//继续写下一批}//4.关闭流:fw.close();}
利用FileReader,FileWriter进行文件复制
正片开始!!!
思路:边读边写
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);//方式3:利用缓冲字符数组,将数组转为String写出。char[] ch = new char[50];int len = fr.read(ch);while(len!=-1){String s = new String(ch,0,len);fw.write(s);len = fr.read(ch);}//6.关闭流:(关闭流的时候,先开的后关!!!)fw.close();fr.close();}
五、使用IO流建议
文本文件:.txt、 .java、 .c、 .cpp --------------------------------------建议使用字符流操作
非文本文件:.jpg、 .mp3、 .mp4、 .doc 、 .ppt---------------------建议使用字节流操作
总结
以上就是IO流的字符流的使用,以及文本文件复制的全过程,本文重点有File类,大家如果不了解可以自行查阅资料,读取和写入的几种方法,其中使用缓冲数组提升效率,还有就是利用字符流完成文本文件的复制,主要思路是一边读取一边写入,初学者慢慢体会,欢迎各位大神指正。
这篇关于IO流之字符流实战的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!