一、使用File类操作文件
1、什么是文件?
文件可认为是
相关记录或
放在一起的数据的集合。
2、文件一般储存在哪里?
储存在磁盘、光驱、移动硬盘等。
3、java程序如何访问文件属性?
Java API :java.io.File 类
使用.File 类,访问文件的属性
注意:
A:一个“\”代表根目录,因为“\”有特殊意义,所以前面需要再加上一个“\”,代表转义字符。
B:将需要操作的文件
路径传给该对象,对象就可以通过一系列方法,对这个文件进行操作了。
二、File 类常用方法
注意:
A:相对路径名——相对于当前代码的路径。
B:绝对路径名——表示
完整路径
C:目录指的就是文件夹
二、字节流与字符流概述
1、
字符流的由来
因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。
2、字节流和字符流的
区别
A:
读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
B:
处理对象不同
字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
3、结论
只要是处理
纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。
第三节:字节流读写文件
1、InputStream/OutputStream,都是抽象的读/写数据方式
2、EOF=End 读到结尾时是-1
3、FileInputStream
(输入流的基本方法)
概述:该流用于从文件读取数据,可以使用
字符串类型的文件名来
创建一个输入流对象来读取文件
A:代码:InputStream is = new FileInputStream("res/data.xml");
B:创建了InputStream对象,就可以使用下面的方法来读取流或者进行其他的流操作。
C:读取的方式
//创建文件读入对象,传一个文件对象进去
//InputStream是一个抽象类
InputStream is = new FileInputStream(file);
// //调用读的方法,返回的是一个字节,再转换成字符
// System.out.println((char)is.read());
int leng = is.read();
//如果字节读取完,则返回-1
while (leng != -1) {
System.out.println((char)leng);
leng = is.read();//再读取下一个字节
4、FileOutputStream(
输出流基本方法)
A、概述:该类用来创建一个文件并向文件中
写数据。如果该流在打开文件进行输出前,
目标文件不存在,那么该流会创建该文件。
B、代码:OutputStream os = new FileOutputStream("res/data.xml",true)
////第一个参数是文件对象,
第二个参数是是
追加还是覆盖,传入布尔值,“真”是追加
C、创建OutputStream 对象完成后,就可以使用下面的方法来写入流或者进行其他的流操作。
//第一个参数是字节数组,第二个参数是数组的下标,第三个参数是长度
os.write(arr, 0, arr.length);
5、缓冲流
BufferedInputStream(InputStream in)和BufferedOutputStream(OutputStream out)
6、二进制文件的读写
DataInputStream(
InputStream in)和DataOutputStream(
OutputStream out)
常用方法:writeInt()/writeDouble()/writeUTF()/read()/readUTF()/readChar等等
作用:可以读写图片、音乐、视频等。
——
——
第四章:字符流读取文本文件
1、输入流
new FileReader(File filename):创建字符输入流对象
new FileReader(String filename):创建字符输入流对象
read():读取下一个字符
方法1:
//创建一个字符输入流对象
Reader r = new FileReader("D:/a.txt");
//创建一个字符串对象
StringBuffer sb =new StringBuffer();
char[] ch = new char[4];
//没必要用循环
int leng = r.read(ch);
while (leng != -1) {
//使用字符串添加方法
sb.append(ch);
leng = r.read();
}
System.out.println(sb);
方法2:
//创建一个字符输入流对象
Reader r = new FileReader("D:/a.txt");
//定义一个字符数组
char[] ch = new char[4];
System.out.println(r.read(ch));//返回的是真实的字符个数
//传一个字符类型的数组,在读取文件里信息后,会将字符存入该数组中。
//相当于,发生了一个引用传递,改变了传过去的数组
r.read(ch);
for (char c : ch) {
System.out.println(c);
}
2、输出流
FileWriter (File filename),FileWriter (String filename):创建输出对象
FileWriter (File filename,boolean append):是追加还是覆盖
字符输入流和输出流的read和
write· 作用:提升效率方法
使用字符数组读写数据,即以字符为基本单位处理数据
代码:
Writer w = new FileWriter("D:/a.txt");
w.write("中华人民共和国感谢法");
w.flush();//刷新缓存的方法
3、缓冲流
BufferedReader(
Reader in)和BufferedWriter (Writer out)
BufferedReader--->readLine()一次读一行
BufferedWriter--->newLine()插入换行符
输入流代码:
Reader r = new FileReader("D:/a.txt");
BufferedReader br = new BufferedReader(r);
String l = br.readLine();
while (l != null) {
System.out.println(l);
l = br.readLine();
}
4、总结
1、后产生的流,要先关。
2、关闭放在finally块中