IO流
字母I:Input
字母O:output 输出
流:数据流
IO流的分类:
输入流和输出流 vs 字节流
字节流:可以处理任何一种文件数据
字符流:只能处理纯文本文件
字符输入流:读纯文本文件
字符输出流:写纯文本文件
如果希望将数据写到纯文本文件中,那么可以使用FileWriter类。
1.导包
import java.io.FileWriter;
2.创建,构造方法
public FileWriter(String fileName):参数字符串就是文件的路径名称。
FileWriter fw = new FileWriter(“file01.txt”);
文件扩展名只能决定默认用什么软件打开文件,不能决定其内容。
3.使用,成员方法
写数据:public void writer(String str):参数就是需要写到文件中的字符串。
关闭流:public void close():关闭,释放相关资源。
总结一下:FileWriter基本使用步骤:创、写、关
在使用FileWriter的时候:
1.如果指定的文件不存在,那么会自动创建该文件
2.如果指定的文件已经存在,那么将会覆盖写入
3.如果不希望进行覆盖写入,而希望进行追加,那么要用另外一种重载形式的构造方法;
public FileWriter(String fileName , boolean append);第二个参数如果是true值,那么将会追加写入
public static void main(String [] args)throws IPException{
FileWriter fw = new FileWriter("file02.txt",true);//创
fw.writer("java");//写
fw.close();//关
}
如何才能实现换行的效果?
换行其实也是一种字符,叫做”换行符“。
windows当中的换行符是:\r\n 这叫做两个字符,一个是\r一个是\n
macOS当中的换行符是:早期是\r ,现在是\n
Linux当中的换行符是\n
FileReader用来将文本文件当中的字符读取到程序中。
使用的步骤:
1.导包
import java.io.FileReader;
2.创建,构造方法;
public FileReader(String fileName);参数仍然是文件的路径名。
FileReader fr = new FileReader(”fileXxx.txt“);
如果指定文件名对应的文件不存在,那么将会直接报错
3.使用,成员方法;
读取单个字符:public int read():读取下一个字符,得到对应的ASCII或Unicode值
关闭释放资源:public void close()
使用FileReader的步骤也是三个字:创、读、关
每次调用read方法,都会尝试读取下一个新字符
扩展:
如果一个int变量确实是一个文字对应的ASCII值,那么可以通过格式将其翻译成为文字
(char)变量名称
public static void main(String [] args){
FileReader fr = new FileReader("file06.txt");//创建
//返回值是读取到的单个字符,对应的ASCII或者Unicode数值
int ch = fr.read();
System.out.println(ch);// 97 a
int ch = fr.read();
System.out.println(ch);//98 b
int ch = fr.read();
System.out.println(ch);//99 c
int ch = fr.read();
System.out.println(ch);//-1代表没有更多字符可以读取
fr.close();//关闭
}
public static void main(String [] args){
FileReader fr = new FileReader("file06.txt");//创建
int ch;//代表一个单个字符(对应的ASCII/Unicode)
while((ch = fr.read())!= -1){
System.out.println((char)ch);//a,b,c
}
fr.close();//关闭
}
public static void main(String[] args)throws IOException{
FileReader fr = new FileReader("file07.txt");
char[] buf = new char[2];
int len;//代表有效个数
while ((len = fr.read(buf))!= -1){
String str = new String(buf,0,len);
System.out.println(str);
}
fr.close();
}
BufferedWriter
构造方法:
public BufferedWrirer(FileWriter fw):参数就是一个普通的FileWriter对象。
BUfferedWriter额外提供了一个换行的方法:
public void newline():将会自动根据操作系统的不同,选择写入\r\n或者\r或者\n
public static void main(String [] args) throws IOException{
//首先创建一个普通的FileWriter
FileWriter fw = new FileWriter("file08.txt");
//将这个普通的FileWriter对象传递给BufferedWriter构造方法即可。
BufferWriter bw = new BufferWriter(fw);
//后面bw的时候,和fw基本没有区别。
bw.writer("Hello");
bw.close();
}
BufferedReader
public static void main(String[] args) throws IOException{
FileReader fr = new FileReader("file10.txt");
//将其包装成为缓冲区的BufferedReader
BufferedReader br = new BufferedReader(fr);
//读取单个字符
int ch;//代表单个字符
while ((ch = br.read())!= -1){
System.out.println((char)ch);
}
//读取字符数组(其实就是从8192的缓冲区当中一次性取出多个字符使用)
char[] buf = new char[2];//一次性取两个
int len;//代表有效个数
while((len = br.read(buf))!=-1){
String str = new String(buf,0,len);
System.out.println(str);
}
br.close();
}
BufferedReader提供了一个方法,可以读取一整行字符串。
public String readLine():读取一整行字符串,返回值当中不包含换行符。
public static void main(String[] args){
FileReader fr = new FileReader("file11.txt");
BufferedReader br = new BufferedReader(fr);
String line;//代表一行字符串
while ((line = br.readerlin())!=null){
System.out.println(line);
}
}