使用字符流拷贝数据时,需要注意在文件末尾处的数据,因为最后一次读取的长度不会刚好与数组input长度相同,所以需要引入新的变量来存储每次读取的长度。

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

public class RWByCharStream {

public static void main(String[] args) {

try {

//File file=new File("java.txt");

FileInputStream fis=new FileInputStream("java.txt");

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");

FileOutputStream fos=new FileOutputStream("java_copy.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos);

char input[]=new char[100];

int f=0;

while((f=isr.read(input))!=-1) {

//System.out.println(new String(input,0,f));

osw.write(input,0,f);

}

isr.close();

fis.close();

osw.close();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

使用缓冲字符流读写数据:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.UnsupportedEncodingException;

public class RWByBufferedCharStream {

public static void main(String[] args) {

try {

//File file=new File("java.txt");

FileInputStream fis=new FileInputStream("java.txt");

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");

FileOutputStream fos=new FileOutputStream("java_copy_buffer.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos);

BufferedReader br=new BufferedReader(isr);

BufferedWriter bw=new BufferedWriter(osw);

String input;

while((input=br.readLine())!=null) {

bw.write(input);

}

bw.close();

br.close();

isr.close();

fis.close();

osw.close();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

拷贝的文件中没有换行,全在同一行。

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.io.UnsupportedEncodingException;

public class RWByBufferedCharStream {

public static void main(String[] args) {

try {

//File file=new File("java.txt");

FileInputStream fis=new FileInputStream("java.txt");

InputStreamReader isr=new InputStreamReader(fis,"UTF-8");

FileOutputStream fos=new FileOutputStream("java_copy_buffer.txt");

OutputStreamWriter osw=new OutputStreamWriter(fos);

BufferedReader br=new BufferedReader(isr);

//BufferedWriter bw=new BufferedWriter(osw);

PrintWriter pw=new PrintWriter(osw);

String input;

while((input=br.readLine())!=null) {

//bw.write(input);

pw.println(input);

}

//bw.close();

pw.flush(); //将最后一次读取的内容从缓冲区读出来

pw.close();

br.close();

isr.close();

fis.close();

osw.close();

fos.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

使用PrintWriter代替BufferedWriter,方便处理最后一次读取的内容和每行里的换行。

在java中字符流怎么复制_Java 使用字符流拷贝数据相关推荐

  1. java中getchars是什么意思_java中的getChars()方法

    getChars public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将字符从此字符串复制到目标字符数组. ...

  2. [初级]Java中的switch对整型、字符型、字符串的具体实现细节

    转载自 [初级]Java中的switch对整型.字符型.字符串的具体实现细节 Java 7中,switch的参数可以是String类型了,这对我们来说是一个很方便的改进.到目前为止switch支持这样 ...

  3. java中ch或者的符号_java 中文标点符号判断

    背景 最近需要处理一些文本,发现想细化一些分类,以前的知识短板就暴露出来了. 这一篇主要是针对网上的资料收集整理. 偏于以后学习查阅. 中文标点符号判断 Java Character 实现Unicod ...

  4. Java中long和int互相转换,不改变原有数据

    Java中long和int互相转换,不改变原有数据 文章目录 Java中long和int互相转换,不改变原有数据 测试方法,及封装好的方法 封装好之后的方法 测试方法,及封装好的方法 @Test pu ...

  5. java中的输入输出流概念_java输入输出--I/O流的概念和划分

    理解数据流 数据流(Stream)是一组有顺序的,有起点的,有终点的字节集合,是对输入和输出的总称和抽象. 一般地,数据流分为 输入流(InputStream)和输出流(OutputStream).输 ...

  6. java中字符串的精确匹配_Java最佳实践–字符串性能和精确字符串匹配

    java中字符串的精确匹配 在使用Java编程语言时,我们将继续讨论与建议的实践有关的系列文章,我们将讨论String性能调优. 我们将专注于如何有效地处理字符串创建, 字符串更改和字符串匹配操作. ...

  7. java i/o 流详解_java I/O流详解

    概况 I/O流主要分为二大类别:字符流和字节流. 字节流(基本流) 1.字节输入流    类名:FileInputStream    特点:读(对文件进行读取操作)    父类:InputStream ...

  8. java中输出时 什么作用_JAVA中输入和输出处理(Java I/O)重点总结

    文件-使用File类操作文件: 什么是文件?  文件可认为是相关记录或放在一起的数据的集合. 文件一般存储在哪里?  储存在存储设备里. Java程序如何访问文件?  Java API:java.io ...

  9. Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍

    1.浅复制与深复制概念 ⑴浅复制(浅克隆) 被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象.换言之,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象. ⑵ ...

最新文章

  1. Mac打包Android的apk,[Mac][React Native][Android] 打包成apk
  2. [20150608]dbms_random.value.txt
  3. 【深度学习】图像输入网络必要的处理流程
  4. VS2010中重命名项目
  5. 高性能WEB开发(6) - web性能测试工具推荐
  6. 有了 for (;;) 为什么还需要 while (true) ? 到底哪个更快?
  7. QT绘制百分比条形图。
  8. VC编辑框(EDIT)的自动换行、自动滚屏 、到指定行数自动清空
  9. Java比较器概述即代码讲解实现
  10. [Android1.6]横竖屏切换时自动弹出键盘的问题
  11. DNN Mail功能介绍 [DNN 3.2.2]
  12. matlab最小费用最大流函数,Matlab最小费用最大流算法通用程序
  13. UML设计(团队作业)
  14. Redis 3.2.x版本 redis.conf 的配置文件参数详解
  15. 数据恢复软件分享(第二篇)
  16. 对比学习(Contrastive Learning) (1)
  17. Duilib中caption的问题
  18. 关于 IOS 的299$ 美元企业模式(In House)及Installing Apps Wirelessly 详解
  19. 聚沙成塔-linux 常用命令
  20. struts2 超链接a标签执行action

热门文章

  1. chromedriver : Saving to 安装卡住 解决
  2. oracle选择外键列,Oracle外键列上是否需要索引?
  3. TCP面向连接中的“连接”和“可靠”与“不可靠”
  4. 使用apache FileUtils下载文件
  5. middle函数C语言,C语言函数调用栈(三)
  6. 【C语言进阶深度学习记录】十七 宏定义的使用与分析
  7. 【C++深度剖析教程6】C++之友元
  8. BUUOJ reverse 不一样的flag
  9. 集腋成裘-10-ECharts -未知-03
  10. [HAOI2016]食物链