什么是字符流

对于文本文件(.txt .java .c .cpp) 使用字符流处理

注意点

  1. 读入的文件一定要存在 否则就会报FileNotFoundException
  2. 异常的处理 为了保证流资源 一定可以执行关闭操作 要使用try catch finally 来操作
  3. 写出的文件如果不存在 会自动创建
  4. 实例化FileWriter 处理File参数 还有append参数

    append :false 覆盖原有文件 append :true 在原有文件后面追加

示例

package day03;

import org.junit.Test;

import java.io.*;

/**
* 一.流的分类
* 1. 数据单位 :字节流 字符流
* 2. 流向: 输入流 输出流
* 3. 角色:节点流 处理流
* <p>
* 二.体系结构
* 抽象基类 节点流(或文件流) 缓冲流(处理流的一种)
* InputStream FileInputStream BufferedInputStream
* OutputStream FileOutputStream BufferedOutputStream
* Reader FileReader BufferedReader
* Writer FileWriter BufferedWriter
*/
public class FileReaderWriter {
/**
* 将 hello.txt 读取到 内存中 并输出到控制台 (一个一个读)
* <p>
* 异常的处理 为了保证流资源 一定可以执行关闭操作 要使用try catch finally 来操作
* <p>
* 读入的文件一定要存在 否则就会报FileNotFoundException
*/
@Test
public void testFileReader() {
FileReader fileReader = null;
try {
// 1. 实例化file对象 确定要操作的文件
File file = new File("08_IO\\hello");
if (!file.exists()) {
System.out.println("file不存在");
return;
}
// 2. 提供具体的流
fileReader = new FileReader(file); // 3. 数据的读入
// read() 返回读入的一个字符 如果达到文件末尾 返回 -1
int n;
while ((n = fileReader.read()) != -1) {
System.out.println((char) n);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (fileReader != null) {
// 4. 流的关闭 节省资源
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 使用read重载方法
*/
@Test
public void testFileReader1() {
FileReader fileReader = null;
try {
// 1. File类的实例化
File file = new File("08_IO\\hello");
// 2. FileReader的实例化
fileReader = new FileReader(file);
// 3. 读入的操作
char[] ch = new char[10];
int len;
while ((len = fileReader.read(ch)) != -1) {
/*
* 错误的写法
* */
// for (int i = 0; i < ch.length; i++) {
// System.out.print(ch[i]);
// } /*
* 正确的写法
* 第一种写法
* */
// for (int i = 0; i < len; i++) {
// System.out.print(ch[i]);
// } // 第二种写法
String string = new String(ch, 0, len);
System.out.print(string); }
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4. 资源关闭
try {
if (fileReader != null) {
fileReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 从内存写出到硬盘的文件里
* <p>
* 写出的文件如果不存在 会自动创建
* 如果存在 对原有文件内容的覆盖
*/
@Test
public void testFileWriter() {
FileWriter fileWriter = null;
try {
// 1. 实例化File类对象
File file = new File("08_IO\\hello1");
// 2.提供FileWriter 对象 用于数据的写出
// append :false 覆盖原有文件
// append :true 在原有文件后面追加
fileWriter = new FileWriter(file, true); // 3. 写出的操作
fileWriter.write("wwbao");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4. 关闭流操作
try {
if (fileWriter != null) {
fileWriter.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
} /**
* 复制文件
* <p>
* 利用FileReader 读取文件
* FileWriter 写入文件
*/
@Test
public void testFileReaderFileWriter() {
FileWriter fw = null;
FileReader fr = null;
try {
// 1. 创建File类对象
File srcFile = new File("08_IO\\hello1");
File destFile = new File("08_IO\\hello2"); // 2. 创建FileReader 和 FileWriter对象
fr = new FileReader(srcFile);
fw = new FileWriter(destFile); // 3. 读取文件 写入文件
char[] ch = new char[10];
int len;
while ((len = fr.read(ch)) != -1) {
fw.write(ch, 0, len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
// 4. 关闭资源
try {
if (fw != null) {
fw.close();
}
} catch (IOException e) {
e.printStackTrace();
} try {
if (fr != null) {
fr.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

小结

具体的操作跟字节流类似 实现类不同

对于文本文件(.txt .java .c .cpp) 使用字符流处理

对于非文本文件(.jpg .mp3 .mp4 .doc .ppt) 使用字节流处理

IO之字符流的更多相关文章

  1. Java IO: 其他字符流(下)

    作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...

  2. Java IO之字符流和文件

    前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...

  3. [Java IO]03_字符流

    Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类.  它的定义如下: public abstra ...

  4. Java IO编程——字符流与字节流

    在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...

  5. java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式

    字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...

  6. Java——IO类 字符流概述

    body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...

  7. Java IO(四--字符流基本使用

    在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { ...

  8. 文本数据IO操作--字符流

    一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流 ...

  9. Java IO系统--字符流

    字符流:尽管字节流提供了处理任何类型输入/输出操作的足够功能,它们补鞥呢直接操作Unicode字符.字符流层次结构的顶层是Reader和Writer抽象类.类似于InputStream和OutputS ...

随机推荐

  1. 关于mysql的备份和恢复

    备份:在登录之前(cmd中)mysqldump -u root -p [数据库名称] > c:/back.sql备份的话,肯定是DBA才能做,所以只能用root:恢复mysql -u root ...

  2. ProjectEuler 006题

    题目: The sum of the squares of the first ten natural numbers is, 12 + 22 + ... + 102 = 385 The square ...

  3. linux备份恢复命令

    dump 发行版不自带,需要 yum 或 apt 安装.安装时 restore 也会自动安装. 支持分区和增量备份(仅支持分区增量,目录备份不支持增量).(第一次完全备份,第二次及以后只备份增加和修改 ...

  4. 查询ES6兼容的网站

    http://kangax.github.io/compat-table/es6/ 查询es6兼容的网站

  5. python matplotlib 绘图+显示数值

    参考:https://www.jb51.net/article/152685.htm 用plt.text函数 import numpy as np import matplotlib.mlab as ...

  6. QT学习日记篇-03-仿写一个智能家居界面

    课程大纲: <1>让界面漂亮起来,仿写一个智能家居界面 ->第一:给QT工程添加图片 进入下一步: <注意路径和名称一定不能有中文>                   ...

  7. java 线程状态 详解

    线程被创建后,有一个生命周期,下图是线程的生命周期详解. java api java.lang.Thread.State 这个枚举中给出了六种线程状态,分别是: 线程状态 导致状态发生条件 NEW(新 ...

  8. 常见shell脚本测试题 for/while语句

    1.计算从1到100所有整数的和2.提示用户输入一个小于100的整数,并计算从1到该数之间所有整数的和3.求从1到100所有整数的偶数和.奇数和4.执行脚本输入用户名,若该用户存在,输出提示该用户已存 ...

  9. go中导入包的几种方式

    标准方式: import ( "fmt" )使用:fmt.Println() 点(.)方式 import ( . "fmt" ) 使用时候,可以胜率fmt前缀P ...

  10. golang isPowerOfTwo判断是否是2的幂

    iota.go   strconv包 func isPowerOfTwo(x int) bool { return x & (x -1) } 了解n&(n-1)的作用如下: n& ...