什么是字符流

对于文本文件(.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. yum 和 epel 的详解

    一.概览 1.什么是repo文件 repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,r ...

  2. Java程序设计学习笔记(五) — 多线程

    时间:2016-4-15 09:56 --多线程(还有多核编程)     1.进程         进程是一个正在执行中的程序.         每一个进程执行都有一个执行顺序,该顺序是一个执行路径, ...

  3. Linux环境搭建及项目部署

    一. VMWare安装图解 1.点击下一步 2.接受条款,下一步 3.选择安装目录,不建议有中文目录和空格目录.下一步 4.下一步 5.这两个选项根据可以爱好习惯选择,下一步 6.安装 7.完成 9. ...

  4. Linux下sed找出IP中第四位

    ip addr|sed -n '9p'|egrep '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'|sed -nr 's#^.*inet (.*) b ...

  5. adb - Performing Push Install adb: error: failed to get feature set: more than one 解决方案

    问题背景 直接 adb install 包名  无法安装成功 解决方案 安装 adb -s 10.200.241.215:5555 install test.apk 删除 adb -s 10.200. ...

  6. redis 主从复制详解

    引言 我们之前操作 Redis 都是单机版,但是实际应用中没人使用单机版,都是搭建集群的方式.这篇文章要介绍的主从复制,是指将一台 Redis 服务器的数据,复制到其他 Redis 服务器,我们将前者 ...

  7. python生成时间序列(date_range)

    介绍 自己写了一个用python内置模块实现的生成时间序列的函数 支持自动推断字符串到datetime的转换, 但对格式有一定要求, 其它格式可手动指定格式化方式, 格式化方式与python内置格式化 ...

  8. TypeScript 中装饰器的理解?应用场景?

    一.是什么 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上 是一种在不改变原类和使用继承的情况下,动态地扩展对象功能 同样的,本质也不是什么高大上的结构,就是一个普通的 ...

  9. Storm近年的发展

    storm作为第一款大数据领域的流式计算引擎,在2013年推出之后风头一时无二.后续虽然有spark streaming也作为流式计算的引擎,但storm依然在流式计算的江湖占有稳定的地位.直到201 ...

  10. Java环境搭建与HelloWprld—改变世界的第一步

    1. JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页. 在下载页面,点击Java. 选择Java (JDK) f ...