File类与常用IO流第五章——IO字符流
字符流,只能操作文本文件,不能操作图片、视频等非文本文件
字符输入流 java.io.Reader
字符输入流中一些共性的成员方法
int read():读取单个字符并返回。
int read(char[] cbuf):一次读取多个字符,将这些字符存入数组。
void close():关闭该流并释放与之关联的所有资源。
文件字符输入流 FileRead extends InputStreamReader extends Reader
构造方法:
FileReader(File file):
FileReader(String fileName)
构造方法的参数:
File file :给定从中读取数据的文件
String fileName :给定从中读取数据的文件的名称
构造方法的作用:
创建一个FileReader对象
会把FileReader对象指向要读取的文件
文件字符输入流的使用步骤:
创建FileReader对象,构造方法中传递要读取的数据源;
使用FileReader 对象中的方法 read 读取文件;
释放资源。
使用 int read() 读取单个字
1 public static void main(String[] args) throws IOException {
2 FileReader fr=new FileReader("E:\\GZM\\abc.txt");
3 int len=0;
4 while((len=fr.read())!=-1){
5 System.out.print((char)len);
6 }
7 fr.close();
8 }
使用这个方法经常会出现乱码问题,原因是系统自带的默认格式与文件存储的格式并不一定一致。但是FileReader 在读取文件的时候并不能指定特定的编码格式。解决方法1是将目标文件存储时更改格式。解决方法2是那就在FileInputStream外面嵌套InputStream 来代替FileReader,之后指定编码格式即可,简单来说读取文件用下面的代码即可
InputStreamReader fr = new InputStreamReader( new FileInputStream("D:\\temple\\高温买卖.txt"),"UTF-8");
为了提高读取的效率,使用 int read(char[] cbuf) 一次读取多个字符,并存入字符数组
String(char[] value) 分配一个新的String,使其表示字符数组参数中当前包含的字符序列
1 public static void main(String[] args) throws IOException {
2 FileReader fr=new FileReader("E:\\GZM\\abc.txt");
3 int len=0; //读取到的有效字符个数
4 char[] cs=new char[1024]; //读取到的字符数组
5 while((len=fr.read(cs))!=-1){
6 System.out.print(new String(cs));
7 }
8 fr.close();
9 }
运行后发现后续的字符数组影响了新创建的字符串。
使用 int read(char[] cbuf) 一次读取多个字符,并存入字符数组
String(char[] value,int offset, int count)分配一个新的 String,它包含取自字符数组参数一个子数组的字符。后续对字符数组的修改不会影响新创建的字符串。
1 int len=0;
2 char[] cs=new char[1024];
3 while((len=fr.read(cs))!=-1){
4 System.out.print(new String(cs,0,len));
5 }
6 fr.close();
运行结果很满意。
字符输出流 java.io.Writer
构造方法:
Write():创建一个新的字符流write,其关键部分将同步write自身。
Write(Object lock):创建一个新的字符流wirte,其关键部分将同步给定的对象。
lock:用于同步针对此流的操作的对象。为了提高效率,字符流对象可以使用其自身以外的对象来保护关键部分。因此,子类应使用此字段中的对象,而不是 this 或者同步的方法。【这个暂时不懂,可能与多线程的读写锁有关】
一些共性的成员方法:
void write(int c):写入单个字符。
void wirte(char[] cbuf):写入字符数组。
abstract void write(char[] cbuf,int off,int len):写入字符数组的某一部分。
void write(String str):写入字符串。
void write(String str,int off,int len)。写入字符串的某一部分。
abstract void close():关闭此流,但要先刷新它。
abstract void flush():刷新该流的缓冲。
flush 与 close 的区别:因为内置缓冲区的原因,如果不关闭输出流,无法写入字符到文件中。但是关闭的流对象,是无法继续写入数据的。如果我们既想要写出数据,又想继续使用流,就需要flush方法:
flush:刷新缓冲区,流对象可以继续使用。
close:先刷新缓冲区,然后通知系统释放资源。流对象不能再被使用了。关闭流之后继续使用会异常:IOException:Stream closed 流已经关闭异常。
文件字符输出流 java.io.FileWriter extends OutputStreamWriter extends Writer
构造方法:
FileWrite(File file):根据给定的File对象构造一个FileWrite对象。
FileWrite(String fileName):根据给定的文件名构造一个FileWrite对象。
FileWrite(File file,boolean append)
FileWrite(String fileName,booean append)
构造方法的参数:
File file:一个文件对象
String fileName:文件的路径
boolean append:是否需要覆盖原文件
true:不会覆盖原文件中的数据,而是续写。
false:覆盖原文件的数据。
构造方法的作用:
会创建一个FileWrite对象;
会根据构造方法中绑定的文件\文件的路径,创建文件;
会把FileWrite对象指向创建好的文件。
字符输出流的使用步骤:
创建一个FileWrite对象,构造方法中绑定要写入数据的目的地;
使用FileWrite中的方法 write ,把数据写入到内存缓冲区中(字符转为为字节);
使用FileWrite中的方法 flush ,把内存缓冲区的中数据,刷新到文件中;
释放资源(会把内存缓冲区中的数据刷新到文件中,所以第3步可以不用写。
文件字符输出流的写入方法演示
写入单个字符:void write(int c)
1 FileWriter fw=new FileWriter("E:\\temp\\abc.txt");
2 fw.write(117); //'u'
3 //fw.flush();
4 fw.close();
写入字符数组:void write(char[] cbuf)
1 FileWriter fw=new FileWriter("E:\\temp\\AAA.txt");
2 char[] cs=new char[]{'I',' ','L','o','v','e',' ','J','a','v','a'}; fw.write(cs);
3 //fw.flush();
4 fw.close();
写入字符数组的某一部分:abstract void write(char[] cbuf,int off,int len)
1 FileWriter fw=new FileWriter("E:\\temp\\BBB.txt");
2 char[] cs=new char[]{'I',' ','L','o','v','e',' ','J','a','v','a'}; fw.write(cs,3,7);
3 //fw.flush();
4 fw.close();
写入字符串:void write(String str)
1 FileWriter fw=new FileWriter("E:\\temp\\CCC.txt");
2 fw.write("I LOVE C TOO");
3 //fw.flush();
4 fw.close();
写入字符串的某一部分:void write(String str,int off,int len)
1 FileWriter fw=new FileWriter("E:\\temp\\CCC.txt");
2 fw.write("I LOVE C TOO",3,9);
3 //fw.flush();
4 fw.close();
文件字符输出流的换行:
windows:\r\n
Linux:/n
max:/r
File类与常用IO流第五章——IO字符流的更多相关文章
- 08 IO流(五)——文件字符流FileWriter/FileReader
对比文件字节流的优势 对于文本文件的数据传输,使用文件字符流,就不用考虑编码转码的问题. 对比文件字节流,在方法上的不同有哪些 文件字符流有append方法: Writer append(char c ...
- File类与常用IO流第四章——IO字节流
一切文件在存储时,都是以二进制数字的形式保存的,都是一个一个字节.无论使用什么样的流对象,底层传输的始终是二进制数据. 字节输出流 OutputStream java.io.OutputStream ...
- File类与常用IO流第一章File类
第一章:File类 一.1个重点单词: file:文件:directory:文件夹/目录:path:路径(绝对路径:absolutePath) 二.4个静态成员变量: 1.static String ...
- Java—IO流 File类的常用API
File类 1.只用于表示文件(目录)的信息(名称.大小等),不能用于文件内容的访问. package cn.test; import java.io.File; import java.io.IOE ...
- [19/03/31-星期日] IO技术_四大抽象类_字符流( 字符输入流 Reader、 字符输出流 Writer )(含字符缓冲类)
一.概念 Reader Reader用于读取的字符流抽象类,数据单位为字符. int read(): 读取一个字符的数据,并将字符的值作为int类型返回(0-65535之间的一个值,即Unicode ...
- java基础之IO流(二)之字符流
java基础之IO流(二)之字符流 字符流,顾名思义,它是以字符为数据处理单元的流对象,那么字符流和字节流之间的关系又是如何呢? 字符流可以理解为是字节流+字符编码集额一种封装与抽象,专门设计用来读写 ...
- (19)IO流之字符流FileReader和FileWriter,缓冲字符流---缓冲输入字符流BufferedReader和缓冲输出字符流BufferedWriter
字符流,读取的文件是字符的时候,有两个基类一个是Reader,一个是Writer这有点拟人的感觉,人直接看懂的是文字 字符流 字节流:读取的是文件中的二进制字节流并不会帮你转换成看的懂得字符 字符流: ...
- File类与常用IO流第九章——转换流
第九章.转换流 字节编码和字符集 编码:按照某种规则将字符以二进制存储到计算机中. 解码:将存储在计算机中的二进制数按照某种规则解析显示出来. 字符编码:Character Encoding ,就是一 ...
- Java中Io流操作-File类的常用操作-创建文件,创建文件夹
package com.hxzy.IOSer; import java.io.File;import java.io.IOException; public class Demo03 { public ...
随机推荐
- MindSpore平台系统类
MindSpore平台系统类 Q:MindSpore只能在华为自己的NPU上跑么? A: MindSpore同时支持华为自己的Ascend NPU.GPU与CPU,是支持异构算力的. Q:MindSp ...
- TensorFlow神经网络集成方案
TensorFlow神经网络集成方案 创造张力流create_tensorflow_neuropod 将TensorFlow模型打包为neuropod包. create_tensorflow_neur ...
- 多加速器驱动AGX的目标检测与车道分割
多加速器驱动AGX的目标检测与车道分割 Object Detection and Lane Segmentation Using Multiple Accelerators with DRIVE AG ...
- 激光雷达数据到云cloud
激光雷达数据到云cloud 在美国地质调查局的3D提升计划(3DEP)被激发到一个新的方式可用性宣布从3DEP仓库的访问和处理激光雷达点云数据. 3DEP一直在美国使用光检测和测距(激光)技术获取三维 ...
- 性能工具之Jmeter小白入门系列之一
一.简单了解 Apache JMeter The Apache JMeter application is open source software, a 100% pure Java applica ...
- ffmpeg实战-音视频合成案例
转发自白狼栈:查看原文 很多小伙伴私下里留言说,之前没接触过音视频,对于ffmpeg可以做什么还是有些懵. 今天我们一起看下我们究竟可以用 ffmpeg 做什么? 很多小伙伴应该都玩过抖音,你在&qu ...
- 搭建 MySQL 高可用高性能集群
什么是MySQL集群,什么是MySQL集群,如果你想知道什么是MySQL集群,我现在就带你研究. MySQL 是一款流行的轻量级数据库,很多应用都是使用它作为数据存储.作为小型应用的数据库,它完全可以 ...
- 从 Nginx 优秀的核心架构设计,揭秘其为何能支持高并发?
目录: 1. Nginx的整体架构 2. Nginx的模块化设计 3. Nginx的请求方式处理 4. Nginx事件驱动模型 5. Nginx进程处理模型 写在前面 Nginx 是一个 免费的,开源 ...
- NOIP模拟测试16「Drink·blue·weed」
话说这次考试 Drink 非常棒的一道卡常练习题,适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar,输入getchar 在这个题快了7000豪 2. ...
- 7.6、openstack网络拓扑
1.openstack官方架构图: 2.openstack服务常用服务的端口号: mysql:3306 keystone:5000 memcache:11211 rabbitmq:5672 rabbi ...