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

字符输出流: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. 剑指offer-调整数组内奇偶数顺序

    题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变. 解题思路 时间换 ...

  2. Oracle11g版本中未归档隐藏参数

    In this post, I will give a list of all undocumented parameters in Oracle 11g. Here is a query to se ...

  3. 手机验证码JQUERY实现

    <!DOCTYPE html> <html> <head> <script src="http://libs.baidu.com/jquery/1. ...

  4. Linux stress CPU的测试方法

    一.stress工具安装:1.获取stress源码安装包(stress-1.0.4.tar.gz)3.解压并安装 [root@localhost /]#cd /tmp/ [root@localhost ...

  5. Linux确认网口对应配置文件

    服务器经常是多网卡多网口,我们在某个网口插上网线后,到/etc/sysconfig/network-scripts/下配置ip时需要确定插上网线的网口对应的是哪个配置文件(比如是eth0还是eth1) ...

  6. [转]每天一个linux命令(44):top命令

    top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.下面详细介绍它的使用方法.top是一个动态显示过程,即可以通过用户按键来不断刷新 ...

  7. valgrind 工具介绍和简单的使用

    最近老是遇上各种奇奇怪怪的core dump,不太会分析的情况下看到了这款工具.在这记录分享下. Valgrind 是个开源的工具,功能很多.例如检查内存泄漏工具---memcheck. Valgri ...

  8. ssh免输入密码登录

    ssh免输入密码登录   ubuntu下生成ssh密钥参见.   https://confluence.atlassian.com/display/BITBUCKET/Use+the+SSH+prot ...

  9. JS 浮点型计算的精度问题 推荐的js 库 推荐的类库 Numeral.js 和 accounting.js

    推荐的类库 Numeral.js 和 accounting.js 文章来自 http://www.css88.com/archives/7324#more-7324

  10. Jquery源码探索

    封装原理 这里参考的jquery来进行封装的一个常用方法的一个库,可作为自己的一个库 原理:创建一个构造函数,将所有方法放在该构造函数原型里,访问$()方法时,返回这个构造函数的实例化,这样就简单的实 ...