java 21 - 4 字符流的文件复制操作以及简化

既然字节流可以复制文件,那么字符流当然也有。

同样的思路: 

数据源:
    a.txt -- 读取数据 -- 字符转换流 -- InputStreamReader
目的地:
    b.txt -- 写出数据 -- 字符转换流 -- OutputStreamWriter

 1         // 封装数据源
 2         InputStreamReader isr = new InputStreamReader(new FileInputStream(
 3                 "a.txt"));
 4         // 封装目的地
 5         OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(
 6                 "b.txt"));
 7
 8         // 读写数据
 9         // 方式1
10         // int ch = 0;
11         // while ((ch = isr.read()) != -1) {
12         // osw.write(ch);
13         // }
14
15         // 方式2
16         char[] chs = new char[1024];
17         int len = 0;
18         while ((len = isr.read(chs)) != -1) {
19             osw.write(chs, 0, len);
20             // osw.flush();
21         }
22
23         // 释放资源
24         osw.close();
25         isr.close();

简化:

  我们常用的编码表大都是使用本地默认的编码表,也就是GBK。所以呢,我们可以不指定编码表。

同时,字符流的名称有些长...好长,所以呢,Java就提供了字符流的子类给我们使用:

之前用的字符流:

  OutputStreamWriter = FileOutputStream + 编码表(GBK)

  InputStreamReader = FileInputStream + 编码表(GBK)

使用它的子类:

  FileWriter = FileOutputStream + 编码表(GBK)

  FileReader = FileInputStream + 编码表(GBK)

来,使用简化版重新做复制:

 1         //封装数据源
 2         FileReader fr = new FileReader("a.txt");
 3         //封装目的地
 4         FileWriter fw = new FileWriter("b.txt");
 5
 6         //使用一次读取一个字符数组的方式来复制
 7         int len = 0;
 8         char[] ch = new char[1024];
 9         while((len = fr.read(ch)) != -1){
10             fw.write(ch,0,len);
11         }
12         //释放资源
13         fw.close();
14         fr.close();
15     }

  代码少了很多,简洁明了

时间: 2024-10-11 12:48:56

java 21 - 4 字符流的文件复制操作以及简化的相关文章

java 学习笔记之 流、文件的操作

ava 学习笔记之 流.文件的操作 对于一些基础的知识,这里不再过多的解释, 简单的文件查询过滤操作 package com.wfu.ch08; import java.io.File; import java.io.FilenameFilter; public class Test1 { public static void main(String[] args) { File file=new File("F:\\2017-2018-1\\javase"); // //获取该目录下

java使用字节流和字符流实现文件复制

大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现. 那究竟该怎么做那,话不多说,直接上代码: 一,使用字节流复制文件 public class FileByteCopy {public static void main(String[] args) { FileByteCopy f= new FileByteCopy(); try { f.copy("d:/File/1.txt","d:/CopyFile/1.txt"); } cat

java中的IO流之文件复制

O(∩_∩)O哈哈~ 1.综述 一门成熟的语言肯定具备的几个模块:IO,通信,线程,UI...... Java作为一门成熟的程序语言,其IO流是比较复杂的.上个图大家感受下: 简单分析一下,IO分为两种流:字符流和字节流.字符流的父类Reader(读取到内存)和Writer(从内存输出),字节流的父类InputStream(读取到内存)和OutputStream(从内存输出),然后为了方便各种操作,比如为了文件操作,派生了文件流:为了对象操作,派生了对象流:等等.当初我也是傻傻分不清到底是Inp

使用字符流 创建文件 写入文件 复制文件

import java.io.*; /**   * 使用字符流创建文件复制文件  * 在盘符中文件夹  * 在文件夹中添加文件  * 在文件中写文字  *   复制文件  * */ public class Iof {    public static void main(String[] args) {        try {            fun();                System.out.println();            fun1();          

java io流(字符流) 文件打开、读取文件、关闭文件

java io流(字符流) 文件打开 读取文件 关闭文件 //打开文件 //读取文件内容 //关闭文件 import java.io.*; public class Index{ public static void main(String[] args) throws Exception{ //打开文件 //字符流方式打开 //字符流每次按一个字符读取 FileReader wj = new FileReader("D:/java/kj/javanew/src/Index.java"

Java之字符流读写文件、文件的拷贝

字符流读数据 – 按单个字符读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: int data = reader.read(); // 读取一个字符,返回该字符代表的整数,若到达流的末尾,返回-1 字符流读数据 – 按字符数组读取 创建字符流读文件对象: Reader reader = new FileReader("readme.txt"); 调用方法读取数据: // 读取

重踏学习Java路上_Day21(字符流,io小结,案例)

1:字符流(掌握)    (1)字节流操作中文数据不是特别的方便,所以就出现了转换流.       转换流的作用就是把字节流转换字符流来使用.    (2)转换流其实是一个字符流        字符流 = 字节流 + 编码表    (3)编码表        A:就是由字符和对应的数值组成的一张表        B:常见的编码表            ASCII            ISO-8859-1            GB2312            GBK            G

JAVA 字节流和字符流度读写的区别

java处理文件的类里面,stream结尾都是采用字节流,reader和writer结尾都是采用字符流.两者的区别就是读写的时候一个是按字节读写,一个是按字符. 字符流的底层就是字节流.而字符流主要是读取文本文件内容的,可以一个字符一个字符的读取,也可以一行一行的读取文本文件内容.而字节流读取单位为byte.byte作为计算机存储最基本单位,可以用字节流来读取很多其他格式的文件,比如图片视频等等.基于B/S和C/S的文件传输都可以采用字节流的形式.在读写文件需要对内容按行处理,比如比较特定字符,

java 字节流和字符流的区别 转载

转载自:http://blog.csdn.net/cynhafa/article/details/6882061 java 字节流和字符流的区别 字节流与和字符流的使用非常相似,两者除了操作代码上的不同之外,是否还有其他的不同呢?实际上字节流在操作时本身不会用到缓冲区(内存),是文件本身直接操作的,而字符流在操作时使用了缓冲区,通过缓冲区再操作文件,如图12-6所示. 下面以两个写文件的操作为主进行比较,但是在操作时字节流和字符流的操作完成之后都不关闭输出流.范例:使用字节流不关闭执行 Java