JavaSE入门学习45:文件传输基础之I/O流(四)
来源:互联网 发布:圣元 淘宝网折 编辑:程序博客网 时间:2024/05/16 19:02
五字符流的使用
(1)编码问题
这个问题我们早就说过了,不再过多赘述。
参考:JavaSE入门学习42:文件传输基础之I/O流(一)
(2)认识文本和文本文件
Java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码);而文件是byte byte byte ...的数据
;文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk等)序列化为byte的存储结果。
(3)字符流(Reader Writer)---->操作的是文本文本文件
字符的处理,一次处理一个字符。
字符的底层任然是基本的字节序列。
(4)字符流的基本实现
1)InputStreamReader类和OutputStreamWriter类
InputStreamReader类是完成byte流解析为char流,按照编码解析。
InputStreamReader类的方法:
OutputStreamWriter类是提供char流到byte流,按照编码处理。
OutputStreamWriter类的方法:
实例代码:
import java.io.*;public class IsrAndOswDemo{public static void main(String[] args) throws IOException {FileInputStream in = new FileInputStream("E:\\Java\\JavaSE\\IO\\testutf8.txt");InputStreamReader isr = new InputStreamReader(in);//默认项目的编码,操作的时候,要写文件本身的格式 //InputStreamReader isr = new InputStreamReader(in,"gbk");FileOutputStream out = new FileOutputStream("E:\\Java\\JavaSE\\IO\\testutf81.txt");OutputStreamWriter osw = new OutputStreamWriter(out);//int c;//while((c = isr.read())!=-1){//System.out.print((char)c);//}char[] buffer = new char[8*1024];int b;/* *批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个 *返回的是读到的字符的个数*/while(( b = isr.read(buffer,0,buffer.length))!=-1){String s = new String(buffer,0,b);System.out.print(s);osw.write(buffer,0,b);osw.flush();}isr.close();osw.close();}}
运行结果:
2)FileReader类和FileWriter类
FileReader类用来读取字符文件的便捷类。
FileWriter类用来写入字符文件的便捷类。
FileReader类和FileWriter类中的方法都是来自继承的方法,并没有自己独有的方法。
实例代码:
import java.io.*;public class FrAndFwDemo {public static void main(String[] args) throws IOException{ //采用的是默认编码格式,这里并不能指定编码格式FileReader fr = new FileReader("E:\\Java\\JavaSE\\IO\\test.txt");FileWriter fw = new FileWriter("E:\\Java\\JavaSE\\IO\\test2.txt");//继续在后面追加内容//FileWriter fw = new FileWriter("E:\\Java\\JavaSE\\IO\\test2.txt",true);char[] buffer = new char[2056];int c ;while((c = fr.read(buffer,0,buffer.length))!=-1){fw.write(buffer,0,c);fw.flush();}fr.close();fw.close();}}
运行结果:
(5)字符流的过滤器
BufferedReader类---->readLine 一次读一行
BufferedReader类从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓
冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
BufferedWriter/PrintWriter类---->写一行
BufferedWriter类将文本写入字符输出流,缓冲各个字符,从而实现字符、数组和行的高效读取。
PrintWriter类向文本输出流打印对象的格式化表示形式。
BufferedReader类的方法:
BufferedWriter类的方法:
PrintWriter类的方法:
实例:
import java.io.*;public class BrAndBwOrPwDemo {public static void main(String[] args) throws IOException{//对文件进行读写操作 BufferedReader br = new BufferedReader(new InputStreamReader(newFileInputStream("E:\\Java\\JavaSE\\IO\\test.txt")));//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("E:\\Java\\JavaSE\\IO\\test3.txt")));PrintWriter pw = new PrintWriter("E:\\Java\\JavaSE\\IO\\test4.txt");//PrintWriter pw1 = new PrintWriter(outputStream,boolean autoFlush);String line ;while((line = br.readLine())!=null){System.out.println(line);//一次读一行,并不能识别换行//bw.write(line);//单独写出换行操作//bw.newLine();//换行操作//bw.flush();pw.println(line);pw.flush();}br.close();//bw.close();pw.close();}}
运行结果:
- JavaSE入门学习45:文件传输基础之I/O流(四)
- JavaSE入门学习45:文件传输基础之I/O流(四)
- JavaSE入门学习42:文件传输基础之I/O流(一)
- JavaSE入门学习43:文件传输基础之I/O流(二)
- JavaSE入门学习44:文件传输基础之I/O流(三)
- JavaSE入门学习46:文件传输基础之I/O流(五)(Java序列化)
- JavaSE入门学习46:文件传输基础之I/O流(五)(Java序列化)
- JavaSE入门学习44:文件传输基础之I/O流(三)
- JavaSE入门学习43:文件传输基础之I/O流(二)
- JavaSE入门学习42:文件传输基础之I/O流(一)
- JavaSE入门学习41:文件传输基础之二进制基础
- JavaSE基础学习笔记-Java I/O 系统1
- JavaSE基础学习笔记-Java I/O系统2-File
- 学习笔记I/O篇之四
- javaee学习日记之java基础之I/O流
- JAVASE--集合、I/O流
- java I/O流学习(四)
- IO基础入门之I/O多路复用技术
- cuda中的矩阵乘法
- JAVA异常信息Exception e,e的相关方法
- java.lang.NoSuchMethodError: android.os.StatFs.getAvailableBlocksLong
- HBase Java API类介绍
- Unity3D协程介绍 以及 使用
- JavaSE入门学习45:文件传输基础之I/O流(四)
- NW.js & Electron Compared (2016 Edition)
- 一个简单的通过代码请求k8s生成应用的demo
- 使用JDBC连接mysql,db2等数据库
- 追求Masonry
- HTML5新标签在IE6/IE7/IE8中的几种兼容方式
- spring mvc处理json类型返回结果异常
- js判断单选按钮是否被选中
- 自动保存用户名密码功能:autocomplete详解