文件【1】File类:
封装文件/目录的各种信息,对目录/文件进行操作,但是我们不可以获取到文件/目录中的内容。
【2】引入:IO流:
I/O : Input/Output的缩写,用于处理设备之间的数据的传输。
【3】形象理解:IO流 当做一根 “管”:
备注:判断一个流是输入的还是输出的,是以程序为基准,进入程序叫输入,出程序叫输出。
【4】IO流的体系结构:
【5】案例:通过java程序完成文件的复制操作
功能分解1:文件 --》程序:FileReader
一个字符一个字符的将文件中的内容读取到程序中了:
package com.msb.io01;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
/**
* @author : msb-zhaoss
*/
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 n;
while((n = fr.read())!=-1){
System.out.println((char)n); //ASCII码转字符
}
//4.“管”不用了,就要关闭 ---》关闭流
//流,数据库,网络资源,靠jvm本身没有办法帮我们关闭,此时必须程序员手动关闭:
fr.close();
}
}
原文件内容:
多读的内容展示
想一次性读取五个字符,不够的话下次再读五个字符:
package com.msb.io01;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* @author : msb-zhaoss
*/
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();
}
}