I/O流(文件字符流)

本人倡导的学习理念一向是动手做,而不是看,你盯着代码代码盯着你,可能你一个上午的时间都不会有进展,可能你俩就彼此盯着不动,因为它本身就不动,如果你再不行动那结果怎样就不用我再说了吧

文件字符流

FileReader FileWriter 文件字符输入输出流
那么现在就又有一个问题了,我在上一个博客中写了文件字节流,那么我们在用的时候什么时候选择字符流,什么时候选择字节流呢?

那么在讲这个问题之前先普及一下文件的知识,文件一般分为
1、文本文件
文本文件比如我们的txt文件,html或者CSS文件,我们现在学的java文件也是文本文件,文本文件我们用记事本打开后一般是这样的:
在这里插入图片描述
简单可以理解为你用记事本打开后能够看懂里面的内容。

2、二进制文件
对于二进制文件来说,比如我们随便打开一个图片文件,当然是用记事本打开哈。
比如我的qq头像,哈哈当时喜欢健美,现在喜欢力量举的不过也没有再换了,可能年纪大了吧,不在意这些表面的东西
这是原始文件:
在这里插入图片描述
我们用记事本打开;
在这里插入图片描述
…二进制文件就可以暂时理解成用记事本打开后你看不懂的文件

那么我们在读取操作文本文件的时候一般用字符流,二进制文件就一般用字节流了。
首先我们来看一下读取文件
我们来看一下读取文件的名字和内容:
在这里插入图片描述
这次我们就来读取我桌面上这个txt文件。文件的内容如下:

在这里插入图片描述
好下面直接上代码,请仔细看代码和注释(尤其是注释)
为了保证代码的完整性我就把所有的东西一次性放上来:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;



/** 

* @author Hercules

* @version 创建时间:2020年2月13日 下午1:15:17 

* 字符流 

*/
public class Character {

	public static void main(String[] args) {
		readFile();
	}
	
	/**
	 * 字符流读取
	 */
	public static void readFile() {
		Reader reader = null;
		
		try {
			//首先这是我的文件路径,其实真实的文件路径是一个\就够了,但是java代码需要转译
			//File.separator是分割符,它会根据系统自定义的左斜杠还是右斜杠来自动变化这里就相当于\或者引号中的\\
			reader = new FileReader("C:\\Users\\张帅\\Desktop"+File.separator+"test.txt");//创建了一个文件输入流
			//只要是输入流就有一个read方法,只要是输出流就有一个write方法
			char [] chars = new char[1024];//每次读取1024个字符
			int len = 0;
			StringBuilder sb = new StringBuilder();//链接字符串
			while((	len = reader.read(chars)) != -1) {//如果读完了就会返回-1
				sb.append(chars,0,len);
			}
			System.out.println(sb.toString());
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(reader != null) {//这里是最终要的,一定要记得关流!
				try {
					reader.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

奉劝不要当伸手党,代码出错了先找自己的原因再来责怪别人,我的每一段代码,都是我自己运行过没有错误才发上来的这点我可以保证。
结果如下:
在这里插入图片描述
这就是字符流的读取,至于代码中的各种try catch,异常我们后面我会单独开一篇甚至几篇博客的内容来讲解。这里先照猫画虎就好了。

如果你在编辑代码的过程中没有错误,但是最后却出现了乱码的情况,这应该是你的Eclipse哦哦不好意思你的IDE可能没有选择合适的编码,这里请把编码设置成UTF-8,也就是我们所说的万国码,怎么设置的话自己百度,什么是万国码,也请大家自行百度。

那么我们下面来看字符的输出流:
这里我就在上面代码的基础上再编写一个函数了,请大家自行编写

/*
	 *文件字符输出流 
	 */
	public static void writeFile() {
		Writer writer = null;
		String str = "我是一个字符串\r\n";
		
		try {
			writer = new FileWriter("C:\\Users\\张帅\\Desktop"+File.separator+"test.txt");
			//只要是输入流就有一个read方法,只要是输出流就有一个write方法
			writer.write(str);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if(writer != null) {//一定要记得关流
				try {
					writer.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

结果如下:
在这里插入图片描述
文件字符流到此结束,下一篇博客我们来学习缓冲流

发布了64 篇原创文章 · 获赞 2 · 访问量 841

猜你喜欢

转载自blog.csdn.net/cdut2016/article/details/104178497