大数据必学Java基础(六十九):IO流的深入了解
【摘要】 IO流的深入了解一、引入1、File类封装文件/目录的各种信息,对目录/文件进行操作,但是我们不可以获取到文件/目录中的内容。2、引入IO流I/O : Input/Output的缩写,用于处理设备之间的数据的传输。3、形象理解IO流 当做一根 “管”:4、IO流的体系结构二、案例 通过java程序完成文件的复制操作1、功能分解:文件 -- 程序:FileReader一个字符一个字符的将文件...
IO流的深入了解
一、引入
1、File类
封装文件/目录的各种信息,对目录/文件进行操作,但是我们不可以获取到文件/目录中的内容。
2、引入IO流
I/O : Input/Output的缩写,用于处理设备之间的数据的传输。
3、形象理解
IO流 当做一根 “管”:

4、IO流的体系结构

二、案例 通过java程序完成文件的复制操作
1、功能分解:文件 -- 程序:FileReader
一个字符一个字符的将文件中的内容读取到程序中了
想一次性读取五个字符,不够的话下次再读五个字符
package com.lanson.io01;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* @author : Lansonli
*/
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){
//System.out.println(len);
//错误方式:
/*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]);
}*/
//正确方式2:将数组转为String:
String str = new String(ch,0,len);
System.out.print(str);
len = fr.read(ch);
}
//4.关闭流
fr.close();
}
}
2、功能分解:程序 -- 文件:FileWriter
一个字符一个字符的向外输出
package com.lanson.io01;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author : Lansonli
*/
public class Test03 {
//这是一个main方法,是程序的入口:
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你好";
for (int i = 0 ;i < str.length();i++){
fw.write(str.charAt(i));
}
//4.关闭流:
fw.close();
}
}
发现:
如果目标文件不存在的话,那么会自动创建此文件。
如果目标文件存在的话:
new FileWriter(f) 相当于对原文件进行覆盖操作。
new FileWriter(f,false) 相当于对源文件进行覆盖操作,不是追加。
new FileWriter(f,true)对原来的文件进行追加,而不是覆盖。
利用缓冲数组:向外输出
package com.lanson.io01;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
* @author : Lansonli
*/
public class Test03 {
//这是一个main方法,是程序的入口:
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.开始动作:输出动作:
//一个字符一个字符的往外输出:
String str = "你好中国";
char[] chars = str.toCharArray();
fw.write(chars);
//4.关闭流:
fw.close();
}
}
3、功能分解:利用FileReader,FileWriter文件复制
package com.lanson.io01;
import java.io.*;
/**
* @author : Lansonli
*/
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);
//5.开始动作:
//方式1:一个字符一个字符的复制:
/*int n = fr.read();
while(n!=-1){
fw.write(n);
n = fr.read();
}*/
//方式2:利用缓冲字符数组:
/*char[] ch = new char[5];
int len = fr.read(ch);
while(len!=-1){
fw.write(ch,0,len);//将缓冲数组中有效长度写出
len = fr.read(ch);
}*/
//方式3:利用缓冲字符数组,将数组转为String写出。
char[] ch = new char[5];
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();
}
}
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
作者其他文章
评论(0)