什么是字符流

对于文本文件(.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. docker 安装Hive

    转自:https://www.cnblogs.com/upupfeng/p/13452385.html#%E9%83%A8%E7%BD%B2hive 使用docker快速搭建hive环境   记录一下 ...

  2. spring加载Bean的解析过程(二)

    1.例如: BeanFactory bf = new XmlBeanFactory(new ClassPathResource("spring.xml")); User user ...

  3. Java Web基础 --- Servlet 综述(理论篇)

    摘要: Web 技术成为当今主流的互联网 Web 应用技术之一,而 Servlet 是 Java Web 技术的核心基础.本文首先从请求/响应架构应用的大背景谈起 Servlet 的由来,明确 Ser ...

  4. servlet中servletContext的五大作用(四)

    1.    获取web的上下文路径 2.    获取全局的参数 3.    作为域对象使用 4.    请求转发 5.    读取web项目的资源文件 package day10.about_serv ...

  5. 刷题-力扣-168. Excel表列名称

    168. Excel表列名称 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/excel-sheet-column-title 著作权 ...

  6. react项目实现多语言切换

    网站的语言切换功能大家都见过不少,一般都是一个下拉框选择语言,如果让我们想一下怎么实现这个功能,我相信大家都是有哥大概思路,一个语言切换的select,将当前的选择的语言存在全局,根据这个语言的key ...

  7. redis《三》连接池配置参数

    参数 值 setTestWhileIdle() 在空闲时检查有效性 true setMinEvictableIdleTimeMillis() 连接最小空闲时间 1800000L setTimeBetw ...

  8. 【odoo】【知识杂谈】单一实例多库模式下定时任务的问题分析

    欢迎转载,但需标注出处,谢谢! 背景: 有客户反应有个别模块下的定时任务没有正常执行,是否是新装的模块哪些有问题?排查后发现,客户是在一台服务器上跑着一个odoo容器,对应多个数据库.个别库的定时任务 ...

  9. 查看所有日志命令:journalctl

    journalctl命令作用:实时查看所有日志(内核日志和应用日志) 语法格式: journalctl [参数] 常用参数:-k 查看内核日志-b 查看系统本次启动的日志-u 查看指定服务的日志-n ...

  10. Docker编排工具Docker Compose的使用

    一.安装docker compose 官网推荐方式之一: sudo curl -L "https://github.com/docker/compose/releases/download/ ...