IO流
读数据(输入流)、写数据(输出流)
理解:输入流 磁盘的内容写入内存中的程序
输出流 内存的内容写出到磁盘中
输出流FileWriter
FileWriter fw=new FileWriter("d:\\a.txt");//创建输出流对象(未写盘符,文件在项目根目录的相对路径中创建)
fw.write("HelloWorld");//写数据
fw.flush();//刷新缓冲区,因为数据没有直接写入磁盘中的文件中,而是写到内存缓冲区
fw.close();//释放资源(先刷新缓冲区再通知系统回收资源)
注意:换行符(window识别\r\n、Linux识别\n、mac识别\r)
具体FileWriter类的方法使用请参考官方API
输入流FileReader
方法一:
FileReader fr=new FileReader("a.txt");
int ch;
//ch=fr.read();//一次读取一个字符,读取为-1时表示文件读取结束
//System.out.println(ch);
//System.out.println((char)ch);
//数据读取并在控制台输出
while((ch=fr.read())!=-1) {
System.out.print((char)ch);
}
fr.close();//释放资源
方法二:
FileReader fr=new FileReader("a.txt");
char[] chs=new char[1024];//1024及其整数倍,防止字符出错
int len;
while((len=fr.read(chs))!=-1) {//读出的1024个字符放到chs的字符数组中,返回读出的字符长度
System.out.print(new String(chs,0,len));
}
复制文本
//创建读写流对象
FileReader fr=new FileReader("a.txt");//a.txt要复制的文件
FileWriter fw=new FileWriter("b.txt");
//先读文件再写文件
int ch;
while((ch=fr.read())!=-1) {
fw.write(ch);
}
//释放资源
fw.close();
fr.close();
字符缓冲流
BufferedWriter(将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入。)
为FileWriter提供字符输出缓冲
newLine():写一个换行符
BufferedReader(从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。)
为FileWriter提供字符输入缓冲
readLine()一次读取一行数据,但是不读取换行符
方法一
//创建输出缓冲对象
BufferedWriter bw=new BufferedWriter(new FileWriter("c.txt"));
bw.write("hello");
bw.flush();
bw.close();
//创建输入缓冲对象
BufferedReader br=new BufferedReader(new FileReader("c.txt"));
char[] chs=new char[1024];
int ch;
while((ch=br.read())!=-1) {
System.out.print((char)ch);
}
br.flush();
br.close();
方法二
BufferedWriter bw=new BufferedWriter(new FileWriter("c.txt"));
for(int i=0;i<10;i++) {
bw.write("hello"+i);
bw.newLine();
bw.flush();
}
bw.close();
BufferedReader br=new BufferedReader(new FileReader("c.txt"));
String line;
while((line=br.readLine())!=null) {
System.out.println(line);
}
br.close();
复制文本
BufferedReader br=new BufferedReader(new FileReader("c.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("copy.txt"));
String line;
while((line=br.readLine())!=null){
bw.write(line);
bw.newLine();
bw.flush();
}
bw.close();
br.close();