字符流---Day32
时隔多久,我又回来写博客了,最近忙于两个课设,五周,搞得头发都不知道掉了多少根了,还没成为程序员就开始掉了,等我成为一名程序员的时候岂不是要秃头了,IT界的人会不会帮我当成大佬了,哈哈哈哈,希望我以后也可以成为一名IT界的大佬,虽然有点不现实,但是梦想还是要有的,万一不经意间就实现了也说不定,加油~
字符流
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件
字符输入流[Reader]
java.io.Reader 抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入 流的基本共性功能方法
public void close() :关闭此流并释放与此流相关联的任何系统资源。
public int read() : 从输入流读取一个字符。
public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中
FileReader类
java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。
1. 字符编码:字节与字符的对应规则。Windows系统的中文编码默认是GBK编码表。 idea中UTF-8
2. 字节缓冲区:一个字节数组,用来临时存储字节数据。
构造方法:
FileReader(File file) : 创建一个新的 FileReader ,给定要读取的File对象。
FileReader(String fileName) : 创建一个新的 FileReader ,给定要读取的文件的名称。
读取字符数据:
1. 读取字符: read 方法,每次可以读取一个字符的数据,提升为int类型,读取到文件末尾,返回 -1 ,循环读取
package demosummary.file.filereader;
import java.io.FileReader;
public class FileReader_02 {
public static void main(String[] args) throws Exception{
//使用文件名创建流对象
FileReader fr = new FileReader(".\\src\\demosummary\\file\\a.txt");
//定义变量,保存数据
int a;
//循环读取
while ((a = fr.read())!= -1) {
System.out.println((char) a);
}
//释放资源
fr.close();
}
/**
* 输出结果
* 黑
* 马
* 程
* 序
* 员
*/
}
2. 使用字符数组读取: read(char[] cbuf) ,每次读取b的长度个字符到数组中,返回读取到的有效字符个数, 读取到末尾时,返回 -1
package demosummary.file.filereader;
import java.io.FileReader;
public class FileReader_03 {
public static void main(String[] args) throws Exception{
//创建流对象
FileReader fr = new FileReader(".//src//demosummary//file//a.txt");
//定义变量
int len;
//定义字符数组,作为装字符的容器
char[] l = new char[2];
//循环读取
while ((len = fr.read(l)) != -1) {
System.out.println(new String(l, 0, len));
}
fr.close();
}
/**
* 输出结果
* 黑马
* 程序
* 员
*/
}
字符输出流[writer]
java.io.Writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节 输出流的基本共性功能方法
void write(int c) 写入单个字符。
void write(char[] cbuf) 写入字符数组。
abstract void write(char[] cbuf, int off, int len) 写入字符数组的某一部分,off数组的开始索引,len 写的字符个数。
void write(String str) 写入字符串。
void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个 数。
void flush() 刷新该流的缓冲。
void close() 关闭此流,但要先刷新它。
FileWriter类
java.io.FileWriter 类是写出字符到文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区
构造方法
FileWriter(File file) : 创建一个新的 FileWriter,给定要读取的File对象。
FileWriter(String fileName) : 创建一个新的 FileWriter,给定要读取的文件的名称
基本写出数据
写出字符: write(int b) 方法,每次可以写出一个字符数据
package demosummary.file.filereader;
import java.io.FileWriter;
public class FileReader_04 {
public static void main(String[] args) throws Exception{
//创建流对象
FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//b.txt");
//写入数据
fw.write(97);
fw.write('b');
fw.write('C');
fw.write(30000);
fw.write(40000);
//刷新缓冲
fw.flush();
//释放资源
fw.close();
}
/**
* 输出结果
* abC田鱀
*/
}
注意:
1. 虽然参数为int类型四个字节,但是只会保留一个字符的信息写出。
2. 未调用close方法,数据只是保存到了缓冲区,并未写出到文件中。
关闭和刷新
因为内置缓冲区的原因,如果不关闭输出流,无法写出字符到文件中。但是关闭的流对象,是无法继续写出数据 的。如果我们既想写出数据,又想继续使用流,就需要 flush 方法了。
flush :刷新缓冲区,流对象可以继续使用。
close :先刷新缓冲区,然后通知系统释放资源。流对象不可以再被使用了。
package demosummary.file.filereader;
import java.io.FileWriter;
public class FileReader_05 {
public static void main(String[] args) throws Exception{
//创建流对象
FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//c.txt");
//写入数据并刷新
fw.write("刷");
fw.flush();
fw.write("新");
fw.flush();
//写入数据,并关闭
fw.write("关");
fw.close();
fw.write("闭");//报错(流已关闭): Stream closed
fw.close();
//释放资源
fw.close();
}
/**
* 输出结果
* 刷新关
*/
}
注意:即便是flush方法写出了数据,操作的后还是要调用close方法,释放系统资源。
写出其他数据
1. 写出字符数组 : write(char[] cbuf) 和 write(char[] cbuf, int off, int len) ,每次可以写出字符数 组中的数据,用法类似FileOutputStream
package demosummary.file.filereader;
import java.io.FileWriter;
public class FileReader_06 {
public static void main(String[] args) throws Exception{
//创建流对象
FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//d.txt");
char[] chars = "黑马程序员".toCharArray();
fw.write(chars);//黑马程序员
fw.write(chars,2,2);//程序
//释放资源
fw.close();
}
/**
* 输出结果
* 黑马程序员
* 程序
*/
}
2. 写出字符串: write(String str) 和 write(String str, int off, int len) ,每次可以写出字符串中的 数据,更为方便
package demosummary.file.filereader;
import java.io.FileWriter;
public class FileReader_07 {
public static void main(String[] args) throws Exception{
//创建流对象
FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//e.txt");
String string = "传智播客";
fw.write(string);//传智播客
fw.write(string,2,2);//播客
//释放资源
fw.close();
}
/**
* 输出结果
* 传智播客播客
*/
}
3. 续写和换行:操作类似于FileOutputStream
package demosummary.file.filereader;
import java.io.FileWriter;
public class FileReader_08 {
public static void main(String[] args) throws Exception{
//创建流对象
FileWriter fw = new FileWriter(".//src//demosummary//file//filereader//f.txt");
//写入字符串
fw.write("黑马");
//写入换行
fw.write("\r\n");
//写入字符串
fw.write("程序员");
//释放资源
fw.close();
}
/**
* 输出结果
* 黑马
* 程序员
*/
}
注意:字符流,只能操作文本文件,不能操作图片,视频等非文本文件。当我们单纯读或者写文本文件时 使用字符流 其他情况使用字节流
字符流---Day32的更多相关文章
- java 字节流与字符流的区别
字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作 ...
- Java IO之字符流和文件
前面的博文介绍了字节流,那字符流又是什么流?从字面意思上看,字节流是面向字节的流,字符流是针对unicode编码的字符流,字符的单位一般比字节大,字节可以处理任何数据类型,通常在处理文本文件内容时,字 ...
- IO流中将字节流转成字符流的方法
//字节流--->字符流 1. public class TestIO { public static void main(String[] args) throws IOException { ...
- JAVA之IO流(字符流)
字符流InputStreamReader和OutputStreamWriter是Writer和Read的子类:是字节流通向字符流的桥梁,也就是可以把字节流转化为字符流. InputStreamRead ...
- java IO输入输出流中的各种字节流,字符流类
字节流字节流主要是操作byte类型数据,也byte数组为准,主要操作类就是·字节输出流:OutputStream·字节输入流:InputStream字符流在程序中一个字符等于2个字节,那么java提供 ...
- Java字节流和字符流区别
1.字节流:直接操作文件本身. 2.字符流:通过缓冲区来操作文件. 所有的文件在硬盘或在传输时都是以字节的方式进行的,包括图片等都是按字节的方式存储的,而字符是只有在内存中才会形成,所以在开发中,字节 ...
- 用字符流实现每个文件夹中创建包含所有文件信息的readme.txt
package com.readme; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; i ...
- java IO流 之 字符流
字符是我们能读懂的一些文字和符号,但在计算机中存储的却是我们看不懂的byte 字节,那这就存在关于字符编码解码的问题.所以在学习Io流的字符流前我们先了解些关于编码问题. 一.字符集与字符编码 1.什 ...
- [Java IO]03_字符流
Java程序中,一个字符等于两个字节. Reader 和 Writer 两个就是专门用于操作字符流的类. Writer Writer是一个字符流的抽象类. 它的定义如下: public abstra ...
随机推荐
- ACM-ICPC实验室20.2.22测试-动态规划
C.田忌赛马 直接贪心做就可以~ #include<bits/stdc++.h> using namespace std; ; int a[maxn],b[maxn]; int main( ...
- vue生命周期钩子函数详解
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_35585701/article/ ...
- 概率 dp lightoj 1395
dp[k]用类似于低配版的这道题的做法求出,如下: 然后就从k逆推到0就好了 #include<bits/stdc++.h> using namespace std; ; double d ...
- 前端知识之css
css的几种引入方式 行内样式 行内式是在标记的style属性中设定css样式,不推荐大规模使用 <p style='color:red'>hello world</p> 内部 ...
- zxEditor
<!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="X-UA-C ...
- win10编译OPenBlas
之前没有编译过OpenBlas,今天试了一下. 与参考博客不同之处,我的系统是win10,opencOpenBlas版本0.2.14,Visual Studio版本15. 编译使用MSYS2安装min ...
- java将小写金额转换为大写的工具类
public class Tool { private static final String UNIT = "万千佰拾亿千佰拾万千佰拾元角分"; ...
- 设备驱动基础学习--misc device简单实现
在Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述).miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同. 所有的miscde ...
- 获取表格数据转换为JSON字符串
核心代码JavaScript代码: 方法一 function sc () { var myTable=document.getElementById("myTable"); //获 ...
- 最漂亮的Spring事务管理详解
SnailClimb 2018年05月21日阅读 7245 可能是最漂亮的Spring事务管理详解 Java面试通关手册(Java学习指南):github.com/Snailclimb/- 微信阅读地 ...