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

字符输出流: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. 笔记react router 4(三)

    上一篇我们说到了路由组件的嵌套.想必你已经运用自如了.那么,这一次我们来聊一聊4.X中Router的变更. 在3.X中我们若使用路由的模式,可通过在Router上配置history的值即可. 例如, ...

  2. Navicat 的安装及破解

    本地环境: ubutun 14 1.安装. ①先老实选择官方试用版安装(不推荐在各个下载平台去下载) 中文版:http://www.navicat.com.cn/download/navicat-fo ...

  3. JdbcTemplate查询返回JavaBean的几种方法

    关于JdbcTemplate的官方描述如下: org.springframework.jdbc.core.JdbcTemplate 大约的讲,将JdbcTemplate返回的list结果集生成Java ...

  4. MapReduce(四)

    MapReduce(四) 1.shuffle过程 2.map中setup,map,cleanup的作用. 一.shuffle过程 https://blog.csdn.net/techchan/arti ...

  5. Socket 初识 用Socket建立一个简易Web服务器

    摘自<Asp.Net 本质论>作者:郝冠军 //在.Net中.system.Net命名空间提供了网络编程的大多数数据据类型以及常用操作,其中常用的类型如下: /* IPAddress 类表 ...

  6. Django之路由分配系统

    前言: Django大致工作流程 1.客户端发送请求(get/post)经过web服务器.Django中间件. 到达路由分配系统 2.路由分配系统根据提取 request中携带的的url路径(path ...

  7. PHP json_encode重要的秘密

    php格式化json的函数 json_encode($value,$options) 其中有2个比较常用到的参数 JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 ...

  8. swftools安装教程

    1 安装说明 本教程以环境为CentOS6.5+swftools-0.9.1.安装目录等可根据自己需要更改. 2 安装过程 1)下载软件 http://www.swftools.org/downloa ...

  9. 码云git使用三(本地代码合并)

    现在我们已经学会了把“本地代码上传至码云git服务器”和“从码云git服务器下载代码到本地”. 我们现在学习怎么上传代码到服务器注意事项和步骤. 1.我们修改代码后,我们需要先+Add后再Commit ...

  10. git merge branch

    git branch   look at your branches git branch newbranch git checkout newbrach do something git check ...