字符流FileReader和FileWriter
来源:互联网 发布:狼蛛斩月灯光编程 编辑:程序博客网 时间:2024/05/24 02:24
前面介绍过了FileOutputStream和FileInputStream,但是他们是属于字节流的,字节流,顾名思义,就是一个字节一个字节读取,这样,有时会出错或者出现乱码的情况,因为在“UTF-8”里一个中文是两个字节,而如果我们用字节形式读取,读取的时候刚好只读取一个字节,那么就会出现乱码
那么怎么区分字节流和字符流呢,其实很简单,只要后面跟着的是Reader或writer的就是字符流,后面跟着Stream的就是字节流
我们先来查看一下FileReader的api,
我们看到它是继承InputStreamReader,所以我们直接使用InputStreamReader:先创建一个文件zzq.txt 然后我们使用InputStreamReader读取里面的内容,它会提示()里面可以放一个InputStream类,然后InputStream可以制定编码格式,所以我们在()里new一个FileInputStream,再在后面加上“UTF-8”编码格式
/** * 演示InputStreamReader的用法 */public static void test1() {try {InputStreamReader is = new InputStreamReader(new FileInputStream("zzq.txt"), "UTF-8");int a = 0;while ((a = is.read()) != -1) {System.out.println(a);System.out.println((char) a);}} catch (UnsupportedEncodingException | FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}接下来演示用数组FileInpurStream读取内容,我们先用File指定文件,然后用InpurStreamReader读取
public static void test2() {try {File file = new File("a.txt");InputStreamReader is = new InputStreamReader(new FileInputStream(file), "UTF-8");char[] b = new char[(int) file.length()];while (is.read(b) != -1) {System.out.println(new String(b));}is.close();} catch (UnsupportedEncodingException | FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
上面的方法,还要定义一个数组,可以使用IO流的包装类Buffered,这样,就可以直接读取一行
/** * 演示BufferedReader的用法,整行读取文本 */public static void test3() {BufferedReader br = null;try {br = new BufferedReader(new InputStreamReader(new FileInputStream("zzq.txt"), "UTF-8"));while (br.ready()) {String str = br.readLine();System.out.println(str);}} catch (UnsupportedEncodingException | FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {br.close();} catch (IOException e) {e.printStackTrace();}}}下面介绍FileWrite的用法,查看api可以知道它也是继承OutputStreamWrite
/** * 演示OutputStreamWriter的用法 */public static void test4() {try {OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("zzq1.txt"));os.write(97);os.flush();os.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}上面输出的97因为不是String类型,所以会被电脑内部装换成ascii码,然后在zzq1.txt文件中输入小写字母a
下面我们输入中文试试,在FileOutputStream()里面可以加一个参数true,这样我们之后写入的内容就不会覆盖之前写的了
/** * 演示OutputStreamWriter的用法 */public static void test5() {try {OutputStreamWriter os = new OutputStreamWriter(new FileOutputStream("b.txt", true));os.write("\r\n");os.write("我是zzq");os.flush();os.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}然后介绍一个我认为的大王PrintWrite,怎么说呢,总之如果需要使用输出流就可以想到直接使用PrintWrite,下面看下api,可以看到PrintWrite()里面可以直接放一个文件或者放一个OutputStream,这样就可以使用输出流的方法了
下面进行简单的演示
/** * 演示PrintWriter类的用法 */public static void test6() {try {PrintWriter pw = new PrintWriter("zzq.txt");pw.println("哈喽,我是zzq");pw.println("你好吗");pw.flush();pw.close();} catch (FileNotFoundException e) {e.printStackTrace();}}以上就是字符流的简单介绍
0 0
- 字符流FileReader和FileWriter
- 字符流-FileReader和 FileWriter的用法
- [Java] FileReader/FileWriter 字符流
- 读写字符流 FileReader、FileWriter
- 字符输出流FileWriter和字符输入流FileReader
- FileReader和FileWriter字符流读取和写文件
- 字符输入输出流:java.io.FileReader和java.io.FileWriter
- FileReader和FileWriter字符流实现文件复制
- Java中文件字符流FileReader和FileWriter小结
- IO流的字符流FileWriter、FileReader
- IO流<字符流>FileWriter、FileReader
- 黑马程序员-IO-字符流-FileWriter&FileReader
- day18IO概述& 字符流FileWriter FileReader
- 字符输入流与字符输出流中FileWriter和FileReader介绍-黑马程序员
- 黑马程序员---IO流FileReader和 FileWriter
- IO流中FileWriter和FileReader之一
- Java的IO流--FileWriter和FileReader
- FileReader和FileWriter
- 浅谈Ajax的适用场景和不适用场景
- 欢迎使用CSDN-markdown编辑器
- 我的梦想 从这里起飞
- 2017上半年课程设计递归斐波那契
- GDB 常用调试命令
- 字符流FileReader和FileWriter
- Spring事务管理(未完待续)
- DataGrid基本参数介绍,查询参数封装
- 动态规划:HDU-2542-0-1背包问题:饭卡
- 小白学Python遇到的洼~
- Web Service 的工作原理
- c++11之智能指针
- Manifest merger failed : Error:Execution failed for task ':app:processDebugManifest'.
- word点击退出时未保存怎么办?