Java流与文件操作
12.1数据流的基本概念
1.数据源:提供数据的地方;
数据宿:接受数据的地方;
2.流:数据传输过程中的抽象表述为“流”
3.I/O数据流的分类方式:
(1)按数据流动方向分为输入流、输出流。
(2)根据数据流所关联的是数据源还是其他数据流,可分为节点流和处理流.
节点流可以从/向 一个特定的地方读(数据源)/写 数据。
处理流对一个已经存在的流进行封装和连接,通过所封装的流的功能调用实现增强的数据读/写功能。
(3) 按传输数据的“颗粒大小”划分,可分为字符流和字节流
l 字节流以字节为单位进行数据传输,每次传送一个或多个字节;
(可以处理所有类型的数据,如图片、mp3、avi)
l 字符流以字符为单位进行数据传输,每次传送一个或多个字符
(只能处理字符数据)
l 只要是处理纯文本数据,就要优先考虑使用字符流,除此之外都用字节流
12.5字符流
Reader类和Writer类用来专门处理字符流。这两个类都是抽象类
一. Reader
1. 主要方法:
Public int read();读取一个字符,堵到末尾返回-1;
Public int read(char[] cbuf);将读到的字符存在指定的数组里
public abstract int read(char[] cbuf,int off,int len);将读到的字符存入数组的指定位置(off)
close();进行资源释放
二. Writer
1. 主要方法
public void write(int c):将一个字符写入到一个流中
public void write(char[]):将数组的字符一次写出
public abstract void write(char[] bcbuf,int off,int len):将数组中下标off开始的len个字符写出。
public void write(String):讲一个字符串写如流中
public abstract void flush():刷新流
public abstreact void close():关闭资源,关闭前会先调用flush,刷新流中的数据去目的地,然后流关闭。
三. FileWriter
1.该类特点:
i. 用于处理文本文件。
ii. 该类中有默认的编码表,
iii. 该类中有临时缓冲
2. 没有特有的方法。只有构造函数
3. 构造函数
public FileWriter(String filename);在指定位置,创建一个文件。(如果该文件已存在,将会被覆盖。)
public FileWriter(String filename,boolean append);当传入的boolean类型的参数值为true时,会在指定文件末尾处进行数据的续写。
如:
import java.io.*;
public class Demol {
public static void main(String[] args) throws IOException {
//创建输出流对象
FileWriter fw=new FileWriter("F:/JAVA/lesson/src/lessoneleven/demo.txt");
char ch='中'; char arr[]={'a','b','c'}; String str="program"; fw.write("hello word");fw.write(ch); fw.write(arr); fw.write(str); fw.close();
}
}
四.FileReader
1.作用:用于读取文本文件的流对象。
2构造函数:在读取流对象初始化的时候,必须要指定一个被读取的文件。
FileReader fr=new FileReader("F:/JAVA/lesson/src/lessoneleven/demo.txt");
package lessoneleven;
import java.io.*;
public class demo4 {
public static void main(String[] args) {
FileReader fr=null;
char[] arr=new char[1024];
try{
fr=new FileReader("F:/JAVA/lesson/src/lessoneleven/demo.txt");
int len=fr.read(arr);
while(len!=-1){
System.out.println(new String(arr,0,len));//构造字符串对象输出
len=fr.read(arr);
}
}catch(IOException e){
System.out.println(e.toString());
}finally{
try{
fr.close();
}catch(IOException e){
System.out.println(e.toString());
}
}
}
}