intellij idea安装 Git 循环 extjs6.5 Python爬虫实战 xcode webpack mobile sharepoint layer uiviewcontroller io datepicker bootstrap管理系统模板 sql server 视频教程 java设计模式视频 jq获取元素 mysql汉化包 ajax里面可以嵌套ajax吗 office配置进度 mysql删除表 python编程题 python中的range函数 python文件读取 java基础入门 java8特性 java语法基础 java运行环境 java读取文件内容 java中random java怎么获取当前时间 java异常 shell编程学习 linux系统如何安装 java网络编程 h5模板 运行时错误1004 识别音乐的软件 hyqihei 备份数据的软件
当前位置: 首页 > 学习教程  > 编程语言

java IO流FileReader、FileWriter、BufferedReader、BufferedWriter的使用

2021/1/13 20:35:44 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

文章目录1. 概述2. FileWriter类的使用3. FileWriter写数据的5个方法4. FileReader读数据5. 利用FileReader和FileWriter复制文件6. FileReader一次读取一个字符数组7. 缓冲流 BufferedWriter、BufferedRead 的基本使用8. 高效地复制文本文件9. 缓冲流的特殊功能1. 概述 IO流用…

文章目录

  • 1. 概述
  • 2. FileWriter类的使用
  • 3. FileWriter写数据的5个方法
  • 4. FileReader读数据
  • 5. 利用FileReader和FileWriter复制文件
  • 6. FileReader一次读取一个字符数组
  • 7. 缓冲流 BufferedWriter、BufferedRead 的基本使用
  • 8. 高效地复制文本文件
  • 9. 缓冲流的特殊功能

1. 概述

  • IO流用来处理设备之间的数据传输
  • Java对数据的操作是通过流的方式
  • Java用于操作流的类都在IO包中
  • 流按流向分为两种:输入流,输出流

IO流:

  • 可以把数据储存到文件
  • 也可以从文件中读取数据

2. FileWriter类的使用

FileWriter(String fileName):传递一个文件名称

步骤:

  • A:创建输出流对象
  • B:调用输出流对象的写数据的方法
  • C:释放资源
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo {
	public static void main(String[] args) throws IOException {
		//创建输出流对象
		FileWriter fw = new FileWriter("d:\\a.txt");
		/*
		 * 创建输出流对象做了哪些事情:
		 * 		A:调用系统资源创建了一个文件
		 * 		B:创建输出流对象
		 * 		C:把输出流对象指向文件
		 */
		
		//调用输出流对象的写数据的方法
		//写一个字符串数据
		fw.write("IO流你好");
		//数据没有直接写到文件,其实是写到了内存缓冲区
		fw.flush();
		
		//释放资源
		//通知系统释放和该文件相关的资源
		fw.close();
		
		//while(true) {}
	}
}

在这里插入图片描述

  • 相对路径:相对当前项目而言的,在项目的根目录下(a.txt)
  • 绝对路径:以盘符开始的路径(d:\a.txt)

close()flush()方法的区别:

  • flush():刷新缓冲区。流对象还可以继续使用。
  • close():先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。

3. FileWriter写数据的5个方法

  • void write(String str):写一个字符串数据
  • void write(String str,int index,int len):写一个字符串中的一部分数据
  • void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。‘a’,97
  • void write(char[] chs):写一个字符数组数据
  • void write(char[] chs,int index,int len):写一个字符数组的一部分数据
import java.io.FileWriter;
import java.io.IOException;

public class FileWriterDemo3 {
	public static void main(String[] args) throws IOException {
		//创建输出流对象
		FileWriter fw = new FileWriter("b.txt");
		
		//void write(String str):写一个字符串数据
		fw.write("abcde");
		
		fw.write("\n\n");
		
		//void write(String str,int index,int len):写一个字符串中的一部分数据
		fw.write("abcde",0,5);
		fw.write("abcde",1,3);
		
		fw.write("\n\n");
		
		//void write(int ch):写一个字符数据,这里写int类型的好处是既可以写char类型的数据,也可以写char对应的int类型的值。'a',97
		fw.write('a');
		fw.write(97);
		
		fw.write("\n\n");
		
		//void write(char[] chs):写一个字符数组数据
		char[] chs = {'a','b','c','d','e'};
		fw.write(chs);
		
		fw.write("\n\n");
		
		//void write(char[] chs,int index,int len):写一个字符数组的一部分数据
		fw.write(chs,0,5);
		fw.write(chs,2,3);
		
		//释放资源
		fw.close();
	}
}

在这里插入图片描述

换行符:

  • windows:\r\n
  • linux:\n
  • mac:\r

追加写入:

FileWriter(String fileName, boolean append)

FileWriter fw = new FileWriter("c.txt",true); //表示追加写入,默认是false

4. FileReader读数据

从文件中读数据并显示到控制台

FileReader(String fileName):传递文件名称

输入流读文件的步骤:

  • A:创建输入流对象
  • B:调用输入流对象的读数据方法
  • C:释放资源
import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo {
	public static void main(String[] args) throws IOException {
		//创建输入流对象
//		FileReader fr = new FileReader("fr.txt");
		FileReader fr = new FileReader("FileWriterDemo.java");
		
		//调用输入流对象的读数据方法
		//int read():一次读取一个字符
		
		/*
		//第一次读数据
		int ch = fr.read();
		System.out.println(ch);
		System.out.println((char)ch);
		
		//第二次读数据
		ch = fr.read();
		System.out.println(ch);
		System.out.println((char)ch);
		
		//第三次读数据
		ch = fr.read();
		System.out.println(ch);
		System.out.println((char)ch);
		
		//这是时候,我们发现代码的重复度很高,想用循环改进,但是不知道循环的结束条件是什么
		ch = fr.read();
		System.out.println(ch);
		
		ch = fr.read();
		System.out.println(ch);
		//通过测试,我们知道,如果读取数据的返回值是-1的时候,就说明没有数据了,这也是我们循环的结束条件
		*/
		
		int ch;
		//1:fr.read()
		//2:ch=fr.read()
		//3:ch != -1
		while((ch=fr.read())!=-1) {
			//System.out.println(ch);
			//System.out.println((char)ch);
			System.out.print((char)ch);
		}
		
		//释放资源
		fr.close();
	}
}

在这里插入图片描述

5. 利用FileReader和FileWriter复制文件

public class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		//创建输入流对象
		FileReader fr = new FileReader("FileWriterDemo.java");
		//创建输出流对象
		FileWriter fw = new FileWriter("Copy.java");
		
		//读写数据
		int ch;
		while((ch=fr.read())!=-1) {
			fw.write(ch);
		}
		
		//释放资源
		fw.close();
		fr.close();
	}
}

6. FileReader一次读取一个字符数组

import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo2 {
	public static void main(String[] args) throws IOException {
		//创建输入流对象
		FileReader fr = new FileReader("FileWriterDemo.java");

		char[] chs = new char[1024]; //这里可以是1024及其整数倍
		int len;
		//1:fr.read(chs)
		//2:len=fr.read(chs)
		//3:len != -1
		while((len=fr.read(chs))!=-1) {
			//System.out.println(new String(chs,0,len));
			System.out.print(new String(chs,0,len));
		}
		
		//释放资源
		fr.close();
	}
}

对比:
在这里插入图片描述

7. 缓冲流 BufferedWriter、BufferedRead 的基本使用

  • BufferedWriter:将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
  • BufferedReader:从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
import java.io.BufferedWriter;
import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;

public class BufferedStreamDemo {
	public static void main(String[] args) throws IOException {
		//创建输出缓冲流对象

		BufferedWriter bw = new BufferedWriter(new FileWriter("bw.txt"));
		bw.write("hello");
		bw.flush();
		bw.close();

		//创建输入缓冲流对象
		BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));
		
		/*
		//一次读写一个字符
		int ch;
		while((ch=br.read())!=-1){
			System.out.print((char)ch);
		}
		*/
		
		//一次读写一个字符数组
		char[] chs = new char[1024];
		int len;
		while((len=br.read(chs))!=-1) {
			System.out.print(new String(chs,0,len));
		}
		
		//释放资源
		br.close();
		
	}
}

8. 高效地复制文本文件

  • 读数据 – FileReader
    高效的读数据 – BufferedReader

  • 写数据 – FileWriter
    高效的写数据 – BufferedWriter

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
pub
lic class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		//创建输入缓冲流对象
		BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));
		//创建输出缓冲流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
		
		//读写数据
		/*
		//一次读写一个字符
		int ch;
		while((ch=br.read())!=-1) {
			bw.write(ch);
		}
		*/
		
		//一次读写一个字符数组
		char[] chs = new char[1024];
		int len;
		while((len=br.read(chs))!=-1) {
			bw.write(chs,0,len);
		}
		
		//释放资源
		bw.close();
		br.close();
	}
}

9. 缓冲流的特殊功能

  • BufferedWriter
    • void newLine():写一个换行符,这个换行符由系统决定
  • BufferedReader
    • String readLine():一次读取一行数据,但是不读取换行符
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedStreamDemo {
	public static void main(String[] args) throws IOException {

		BufferedWriter bw = new BufferedWriter(new FileWriter("bw2.txt"));
		for(int x=0; x<10; x++) {
			bw.write("hello"+x);
			//bw.write("\r\n");
			bw.newLine();
			bw.flush();
		}
		bw.close();

		BufferedReader br = new BufferedReader(new FileReader("br.txt"));
		
		String line = br.readLine();
		System.out.println(line);
		
		line = br.readLine();
		System.out.println(line);
		
		String line2;
		//1:br.readLine()
		//2:line=br.readLine()
		//3:line != null
		while((line2=br.readLine())!=null) {
			System.out.println(line2);
		}
		
		br.close();
	}
}

一次读取一行复制文本:

public class CopyFileDemo {
	public static void main(String[] args) throws IOException {
		//创建输入缓冲流对象
		BufferedReader br = new BufferedReader(new FileReader("FileWriterDemo.java"));
		//创建输出缓冲流对象
		BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
		
		//读写数据
		String line;
		while((line=br.readLine())!=null) {
			bw.write(line);
			bw.newLine();
			bw.flush();
		}
		
		//释放资源
		bw.close();
		br.close();
	}
}

本文链接: http://www.dtmao.cc/news_show_600366.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?