IO之字符流
什么是字符流
对于文本文件(.txt .java .c .cpp) 使用字符流处理
注意点
- 读入的文件一定要存在 否则就会报FileNotFoundException
- 异常的处理 为了保证流资源 一定可以执行关闭操作 要使用try catch finally 来操作
- 写出的文件如果不存在 会自动创建
- 实例化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之字符流的更多相关文章
- Java IO: 其他字符流(下)
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) 本小节会简要概括Java IO中的PushbackReader,LineNumberReader,St ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- [Java IO]03_字符流
Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类. 它的定义如下: public abstra ...
- Java IO编程——字符流与字节流
在java.io包里面File类是唯一 一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能够操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操作.而对于程序而 ...
- java IO之 字符流 (字符流 = 字节流 + 编码表) 装饰器模式
字符流 计算机并不区分二进制文件与文本文件.所有的文件都是以二进制形式来存储的,因此, 从本质上说,所有的文件都是二进制文件.所以字符流是建立在字节流之上的,它能够提供字符 层次的编码和解码.列如,在 ...
- Java——IO类 字符流概述
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Java IO(四--字符流基本使用
在上一节,介绍了字节流的基本使用,本节介绍一下字符流的使用 Reader: public abstract class Reader implements Readable, Closeable { ...
- 文本数据IO操作--字符流
一.Reader和Writer 1. 字符流原理 Reader是所有字符输入流的父类而Writer是所有字符输出流的父类.字符流是以字符(char)为单位读写数据的.一次处理一个unicode.字符流 ...
- Java IO系统--字符流
字符流:尽管字节流提供了处理任何类型输入/输出操作的足够功能,它们补鞥呢直接操作Unicode字符.字符流层次结构的顶层是Reader和Writer抽象类.类似于InputStream和OutputS ...
随机推荐
- yum 和 epel 的详解
一.概览 1.什么是repo文件 repo文件是Fedora中yum源(软件仓库)的配置文件,通常一个repo文件定义了一个或者多个软件仓库的细节内容,例如我们将从哪里下载需要安装或者升级的软件包,r ...
- Java程序设计学习笔记(五) — 多线程
时间:2016-4-15 09:56 --多线程(还有多核编程) 1.进程 进程是一个正在执行中的程序. 每一个进程执行都有一个执行顺序,该顺序是一个执行路径, ...
- Linux环境搭建及项目部署
一. VMWare安装图解 1.点击下一步 2.接受条款,下一步 3.选择安装目录,不建议有中文目录和空格目录.下一步 4.下一步 5.这两个选项根据可以爱好习惯选择,下一步 6.安装 7.完成 9. ...
- 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 ...
- 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. ...
- redis 主从复制详解
引言 我们之前操作 Redis 都是单机版,但是实际应用中没人使用单机版,都是搭建集群的方式.这篇文章要介绍的主从复制,是指将一台 Redis 服务器的数据,复制到其他 Redis 服务器,我们将前者 ...
- python生成时间序列(date_range)
介绍 自己写了一个用python内置模块实现的生成时间序列的函数 支持自动推断字符串到datetime的转换, 但对格式有一定要求, 其它格式可手动指定格式化方式, 格式化方式与python内置格式化 ...
- TypeScript 中装饰器的理解?应用场景?
一.是什么 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上 是一种在不改变原类和使用继承的情况下,动态地扩展对象功能 同样的,本质也不是什么高大上的结构,就是一个普通的 ...
- Storm近年的发展
storm作为第一款大数据领域的流式计算引擎,在2013年推出之后风头一时无二.后续虽然有spark streaming也作为流式计算的引擎,但storm依然在流式计算的江湖占有稳定的地位.直到201 ...
- Java环境搭建与HelloWprld—改变世界的第一步
1. JDK下载 访问oracle官网:http://www.oracle.com 在首页点击Downloads,进入oracle软件下载页. 在下载页面,点击Java. 选择Java (JDK) f ...