字符流:只能操作文本文件,与字节流的区别是,字节流是按照字节来读取文件,而字符流是按照字符来读取,因此字符流的局限性为文本文件

字符输出流:Write类,使用时通过子类   每一次写入都要刷新

package com.zs;

import java.io.FileWriter;
import java.io.IOException; public class Demo3 {
public static void main(String[] args) throws IOException {
FileWriter fw=new FileWriter("d:\\c.txt");
fw.write(101);//输入数字自动编码
fw.flush();//字符流每次操作都要使用flush方法刷新
char[] ch={'a','b','c'};
fw.write(ch);//输入数组,写字符数组
fw.flush();
fw.write(ch,0,2);//写部分字符数组选则的字符
fw.write("hello java");//可以直接写字符串
fw.close();
}
}

字符输入流:Reader类,通过子类

package com.zs.Demo2;

import java.io.FileReader;
import java.io.IOException; public class Demo2 {
public static void main(String[] args) throws IOException {
FileReader fr=new FileReader("d:\\c.txt");
int len=0;
while((len=fr.read())!=-1){//一个字符一个字符的读
System.out.println((char)len);
}
fr.close();
FileReader fr1=new FileReader("d:\\c.txt");
char[] c=new char[1024];//用字符数组读数据,加快速度
while((len=fr1.read(c))!=-1){
System.out.println(new String(c,0,len));
}
fr.close();
}
}

复制文件:与字节流相似,需要注意每次写入后都要刷新

package com.zs.Demo2;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException; public class CopyFileByChar {
public static void main(String[] args) {
FileReader fr=null;
FileWriter fw=null;
try {
fr=new FileReader("d:\\c.txt");
fw=new FileWriter("e:\\c.txt");
int len;
char[] c=new char[1024];
while((len=fr.read(c))!=-1){
fw.write(c,0,len);
          fw.flush();
}
} catch (IOException e) {
throw new RuntimeException("复制失败");
}finally {
if (fw != null) {
try {
fw.close();
} catch (IOException e) {
throw new RuntimeException("释放资源失败");
}finally {
if (fr != null) {
try {
fr.close();
} catch (IOException e) {
throw new RuntimeException("释放资源失败");
}
}
}
}
}
}
}

转换流:字符流和字节流之间的桥梁

OutputStreamWriter类:字符转字节

package com.zs.Demo2;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter; public class CharToByte {
public static void main(String[] args) throws IOException {
FileOutputStream fo=new FileOutputStream("d:\\d.txt");
//OutputStreamWriter(字节流对象,编码格式);
OutputStreamWriter fw=new OutputStreamWriter(fo,"utf-8");
fw.write("你好");//这里本来d盘时字节流输入的,可以使用字符流输入字符串;
fw.close();
}
}

InputStreamReader:字节转字符

package com.zs.Demo2;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader; public class ByteToChar {
public static void main(String[] args) throws IOException {
FileInputStream fi=new FileInputStream("d:\\d.txt");
InputStreamReader fr=new InputStreamReader(fi,"utf-8");
char[] c=new char[1024];
int len=0;
while((len=fr.read(c))!=-1){
System.out.println(new String(c,0,len));//你好
}
}
}

注意读取文本的编码格式要一致

Java学习笔记29(IO字符流,转换流)的更多相关文章

  1. java学习笔记之IO编程—字节流和字符流

    1. 流的基本概念 在java.io包里面File类是唯一一个与文件本身有关的程序处理类,但是File只能够操作文件本身而不能操作文件的内容,或者说在实际的开发之中IO操作的核心意义在于:输入与输出操 ...

  2. java学习笔记之IO编程—内存流、管道流、随机流

    1.内存操作流 之前学习的IO操作输入和输出都是从文件中来的,当然,也可以将输入和输出的位置设置在内存上,这就需要用到内存操作流,java提供两类内存操作流 字节内存操作流:ByteArrayOutp ...

  3. Java学习笔记38(字符流)

    字符输出流:Writer类:使用时候需要它的子类 局限性:只能写文本文件,无法写其他文件 方法: package demo; import java.io.FileWriter; import jav ...

  4. java学习笔记(7)——I/O流

    一.File类 File(File parent, String child); File(Stirng filename); ------------------------------------ ...

  5. 【原】Java学习笔记033 - IO

    package cn.temptation; public class Sample01 { public static void main(String[] args) { // 需求:继承关系中爷 ...

  6. java学习笔记之IO编程—打印流和BufferedReader

    1.打印流(PrintWriter) 想要通过程序实现内容输出,其核心一定是要依靠OutputStream类,但是OutputStream类有一个最大缺点,就是这个类中的输出操作功能有限,所有的数据一 ...

  7. Java学习笔记-10.io流

    1.输入流,只能从中读取数据,而不能向其写出数据.输出流,只能想起写入字节数据,而不能从中读取. 2.InputStream的类型有: ByteArrayInputStream 包含一个内存缓冲区,字 ...

  8. Java学习笔记--文件IO

    简介 对于任何程序设计语言,输入和输出(Input\Output)都是系统非常核心的功能,程序运行需要数据,而数据的获取往往需要跟外部系统进行通信,外部系统可能是文件.数据库.其他程序.网络.IO设备 ...

  9. Java学习笔记之——IO

    一. IO IO读写 流分类: 按照方向:输入流(读),输出流(写) 按照数据单位:字节流(传输时以字节为单位),字符流(传输时以字符为单位) 按照功能:节点流,过滤流 四个抽象类: InputStr ...

随机推荐

  1. 『MXNet』第二弹_Gluon构建模型

    上节用了Sequential类来构造模型.这里我们另外一种基于Block类的模型构造方法,它让构造模型更加灵活,也将让你能更好的理解Sequential的运行机制. 回顾: 序列模型生成 层填充 初始 ...

  2. Windows文件共享自动失效解决办法

    右键共享文件夹>>高级共享>>权限>>添加Everyone 安全选项卡>>添加>>高级>>立即查找>>添加Every ...

  3. js字符串转日期兼容性

    今天遇到个bug,安卓上是好的,ios就不行.然后我就把可能用到的值都打印出来,发现日期比较一项在苹果机上就显示false,而谷歌浏览器是true.突然回忆起以前开发遇到过类似的问题,都是出在字符串转 ...

  4. python-django rest framework框架之渲染器

    渲染器 看到的页面时什么样子的,返回数据. restframework中默认就是下面 这两个render类,它的内部实现原理是拿url中的后缀名 .json 和类中的format字段进行比较,如果re ...

  5. Hibernate -- lazy加载

    Hibernate -- lazy加载 hibernate类级别懒加载: lazy:true(默认) //类级别懒加载 //load方法 //class lazy属性 //默认值:true load获 ...

  6. CP-ABE的使用

    参考: http://acsc.cs.utexas.edu/cpabe/tutorial.html http://acsc.cs.utexas.edu/cpabe/ 事先先配置好cp-abe:http ...

  7. Qt_阴影效果

    一.控件阴影效果 为子部件添加阴影比较简单,使用如下方式: QGraphicsDropShadowEffect *shadow_effect = new QGraphicsDropShadowEffe ...

  8. linux查看主机最后启动时间

    1.使用who查看最后重启时间 who -b 2.使用last查看近几次重启时间 last reboot 第一条即为最后一次重启日期 last其实是查询用户的登录记录,reboot是一个伪用户:也就是 ...

  9. Tomcat禁用SSLv3和RC4算法

    1.禁用SSLv3(SSL 3.0 POODLE攻击信息泄露漏洞(CVE-2014-3566)[原理扫描]) 编缉$CATALINA_HOEM/conf/server.xml配置文件,找到https端 ...

  10. 快速搭建springboot框架以及整合ssm+shiro+安装Rabbitmq和Erlang、Mysql下载与配置

    1.快速搭建springboot框架(在idea中): file–>new project–>Spring Initializr–>next–>然后一直下一步. 然后复制一下代 ...