java_10 IO流基础---①FileWriter写数据

一、 FileWriter

1、写数据

需求:

往文件中写数据
	写数据---输出流---FileWriter

FileWriter:

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

输出流写数据的步骤

1、创建输出流对象
2、调用输出流对象的写数据的方法,并刷新内存缓冲区
3、释放资源

相对路径:

相对当前项目而言,在项目的根目录下(a.text)

绝对路径:

以盘符开始的路径(d:\\a.text)

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

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

代码块:

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.text");	
		//若没有加盘符:d
		/*
			FileWriter fw = new FileWriter("a.text");	
			相对路径,选中项目,刷新,便会出现在项目下
		*/	
		/*创建输出流对象做了三个事情:
				1、调用系统资源创建了一个文件
				2、创建输出流对象
				3、把输出流对象指向文件
		*/
		//写一个字符串数据
		fw.write(“IO流”);
		
		//数据没有直接写入文件,而是写到了内存缓冲区,需要调用方法进行刷新,刷新缓冲区
		fw.flush();
		
		//释放资源(才能对该文件进行删除操作,否则仍然使用该文件,不能对文件进行删除操作)
		//通知系统释放和该文件相关的资源
		fw.close();
	}
}

2、FileWriter写数据-----换行和追加写

如何实现数据的换行:

\n可以实现换行,但是Windows系统自带的记事本打开并没有换行,这是因为Windows系统换行的标记是\r\n

不同操作系统换行对应的标记:
	windows:\r\n
	linux:\n
	mac:\r

如何实现数据的追加写入:

FileWreter(String fileName, boolean append)

代码块

import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo{
	public static void main(String[] args ) throws IOException{
		//创建输出流对象
		//FileWriter fw = new FileWriter("c.text");	
		FileWriter fw = new FileWriter("c.text",true);//表示追加写入,默认值为false	
		
		for(int x=0;x<10;x++){
			fw.write("hello"+x);
			fw.write("\n");
		}
		//释放资源
		fw.close();
	}
}

三、FileReader读数据一次读取一个字符

1

需求:

从文件中读取数据并显示到控制台
	读数据---输入流---FileReader

FileReader:

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

输入流读文件的步骤:

1、创建输入流对象
2、调用输入流对象的读取方法
3、释放资源

代码块

public class FileReaderDemo{
	public static void main(String[] args) throws IOException {
		//创建输入流对象
		FileReader fr = new FileReader("fr.txt");
		
		//调用输入流对象的读取方法
		//Int read():一次读取一个字符
		/*
		//第一次读数据
		int ch = fr.read();
		System.out.println(ch);
		System.out.println((char)ch);

		//第二次读数据
		int ch = fr.read();
		System.out.println(ch);
		System.out.println((char)ch);

		//第三次读数据
		int ch = fr.read();
		System.out.println(ch);
		System.out.println((char)ch);
		*/
		/*代码重复度高,想要用循环进行控制的话,但是不知道循环的结束条件,
		从测试的知,当读取数据的返回值是-1时,则说明没有数据,这也是循环的结束条件
		*/
		//代码改进
		int ch ;
		while((ch=fr.read())!=-1){
			System.out.print((char)ch);//无需进行换行
		}
		//释放资源
		fr.close();
	}
}

2、用例:一次读写一个字符复制文本文件

需求:

把项目路径下的FileWriterDemo.java中的内容复制到项目路径下的Copy.java中

文件复制也是有规律可循
数据流:

FileWriterDemo.java-----读数据----FileReader

目的地:

Copy.java----写数据---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){
			System.out.print((char)ch);
		}
		//释放资源
		fw.close();
		fr.close();
	}
}

3、FileReader读数据 一次一个字符数组复制文本文件

在Java项目中创建一个file文件:fr2.txt,在文件中输入

hello
world

/*
输入流读取数据的步骤
1、创建输入流对象
2、调用输入流对象的读取数据的方法(换行占两个字符\r\n)
3、释放资源
*/

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

	//调用输入流对象的读取数据方法
	//int read(char[] cbuf):一次读取一个字符数组的数据,返回的是实际读取的个数
	char[] chs =  new char[5];//这里可以是1024及其整数倍

	//第一次读数据
	int len = fr.read(chs);
	System.out.println("len:"+len);
	System.out.println(new String(chs));//通过创建字符串对象,存储字符串数组
	//System.out.println(new String(chs,0,len))
	
		//第二次读数据
	len = fr.read(chs);
	System.out.println("len:"+len);
	System.out.println(new String(chs));
	//System.out.println(new String(chs,0,len))
	
		//第一次读数据
	len = fr.read(chs);
	System.out.println("len:"+len);
	System.out.println(new String(chs));
	//System.out.println(new String(chs,0,len))

	//释放资源
	fr.close();
}

}
输出结果:

len:5
hello
len:5

wor
len:4
ld
r

第一次:

len:5
hello

第二次:

len:5
\r\nwor

wor

第三次:

len:4
ld\r\nr(r是替换第二次输出结果替换前四个字符后剩下的)
ld
r

①为了避免出现多余字符的出现(r),一般使用System.out.println(new String(chs,0,len))语句。
②上面代码冗余度较高,使用循环进行改进:当实际读取长度为-1时,即表示没有数据可读

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.print(new String(chs,0,len));
}

4、FileReader读取数据------两种方式图解(复制文本文件的方式)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值