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

字符输出流: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. shiro中记住我功能

    Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下: 1.首先在登录页面选中Reme ...

  2. hbase的api操作

    创建maven工程,修改jdk pom文件里添加需要的jar包 dependencies> <dependency> <groupId>jdk.tools</gro ...

  3. tomcat从manager部署war项目上传失败

    tomcat从manager部署war项目上传失败, 查看manager.2018-07-17.log 日志,可以看到如下信息. less manager.2018-07-17.log 17-Jul- ...

  4. 【LeetCode】最大子序列和

    要求时间复杂度 O(n). e.g. 给定数组 [-2,1,-3,4,-1,2,1,-5,4],其中有连续子序列 [4,-1,2,1] 和最大为 6. 我完全没有想法,看了答案. C++实现: int ...

  5. 二、持久层框架(Hibernate)

    一.Hibernate对象的状态 实体类对象在Hibernate中有3中状态:瞬时,持久,脱管. 瞬时:没有和Hibernate发生任何关系,在数据库中也没有对应的记录,一旦JVM结束,对象就消失了 ...

  6. PHPCMS V9完全开发介绍

    PHPCMS V9 文件目录结构: 根目录 | – api 接口文件目录 | – caches 缓存文件目录 | – configs 系统配置文件目录 | – caches_* 系统缓存目录 | – ...

  7. Jquery的jqzoom插件的使用(图片放大镜)

    今天学习一下,图片放大镜功能,需要使用插件JQzoom 引入文件 <script type="text/javascript" src="js/jquery.min ...

  8. mysql sql_mode=only_full_group_by问题?

    视图查询的时候本地数据库报错: 解决办法: 1.查看sql_mode select @@global.sql_mode STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_Z ...

  9. html盒子水平和垂直居中

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  10. laravel中对模型和路由做缓存,提高性能

    模型缓存命令: php think optimize:schema 路由缓存命令: php think optimize:route