java如何讲文件转化成流再单向生成
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java如何讲文件转化成流再单向生成相关的知识,希望对你有一定的参考价值。
参考技术A基于流(Stream)的解决
流是单向的有方向性的描述信息流的对象,InputStream是输入流的接口,对程序来说是入,是读,可以从文件读,缓存区读,网络节点读等等.
写入文件,对程序来说是出,是写,就是FileOutputStream,可以写入int也可以byte[]
所以解决方案就是从InputStream中读出内存到byte[]中然后,使用FileOutputStream写入文件中.比如:其中一种写法
InputStream is = new FileInputStream("a.txt");
FileOutputStream fos = new FileOutputStream("b.txt");
byte[] b = new byte[1024];
while((is.read(b)) != -1)
fos.write(b);
is.close();
fos.close();
安卓io流再回顾
之前学习io模糊模糊的,现在写下,方便自己理解,和以后再熟悉轻松些。(长期更新)
以概念为主。
在学习之前,我们需要了解字节与字符的概念。
字符流以字符(16 位二进制)为单位进行处理,主要用于文本文件等 Unicode 数据。
字节流以字节(8 位二进制)为单位进行处理,主要用于读写图片、声音、视频等二进制 数据。
在这里可以这样简单理解,例如汉字,汉字就是字符,涉及到汉字文本的用字符。
在大多数情况,字节流更为普遍的,因为多数操作对象都是建立在字节流基础上的。
输入情况
(字节流) byte数组
FileInputStream()//创建文件输入流
BufferedInputStream() //创建一个缓冲输入,读取大文件时,用上此方法效率更高。
(字符流)String
FileReader()//同上
BufferedReader()//同上
输出情况简要概括 input 换成output ,reader换成write(偷点懒)
有时候,需要字符字节都用,而且还需在其间相互转化使用。
InputStream提供的是字节流的读取,而非文本读取,用Reader读取出来的是char数组或者String ,使用InputStream读取出来的是byte数组。
Reader类及其子类提供的字符流的读取char,inputStream及其子类提供字节流的读取byte,所以 FileReader类是将文件按字符流的方式读取,FileInputStream则按字节流的方式读取文件;InputStreamReader可以将读如stream转换成字符流方式,是reader和stream之间的桥梁。
InputStreamReader(字节转字符)
一般保存在本地的文本时,字符形式,读取放到展示时,需转化为字节形式,并执行后续操作。
OutputStreamWriter (反之)
一般地,将展示的保存到本地时,字节需转化成字符形式。
在这里贴上我浏览的文章
http://www.cnblogs.com/sjjsh/p/5269781.html
最后就是困扰我比较久的问题,关于字节流字符流的使用场景。
我大致整理了下
需求 1:复制一个文本文件
1. 明确源和目的 源: InputStream Reader 目的: OutputStream Writer 2. 是否是纯文本?是 源: Reader 目的: Writer 3. 具体设备 源: 硬盘 File 目的: 硬盘 File FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("b.txt"); 4. 是否需要额外功能 需要高效,转换 BufferedReader br = new BufferedReader(new FileReader("a.txt")); BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
需求 2:读取键盘录入信息,写入到一个文件中
1. 明确源和目的 源: InputStream Reader 目的: OutputStream Writer 2. 是否是纯文本?是 源: Reader 目的: Writer 3. 设备: 源: 键盘 System.in 目的: 硬盘 File InputStream in = System.in; FileWriter fw = new FileWriter("b.txt"); 将读取的字节数据转成字符串,再由字符流操作——> 4. 是否需要额外功能? 需要转换:将字节流转成字符流,因为明确的源是 Reader,这样操作文本数据更便捷。所 以,要将已有的字节流转成字符流。使用字节——>字符的对象 InputStreamReader isr = InputStreamReader(System.in); FileWriter fw = new FileWriter("b.txt"); 需要高效: BufferedReader br = new BufferedReader(new InputStreamReader(System.int)); BufferedWriter bw = new BufferedWriter(new FileWriter("b.txt"));
需求 3:将一个文本文件数据显示在控制台上
1. 明确源和目的 源: InputStream Reader 目的: OutputStream Writer 2. 是否是纯文本?是 源: Reader 目的: Writer 3. 明确具体设备: 源: 硬盘 File 目的:控制台 System.out FileReader fr = new FileReader("a.txt"); OutputStream os = new OutputStream(System.out); //PrintStream 4. 需要额外功能: 需要转换 FileReader fr = new FileReader("a.txt"); OutputStreamWriter osw = new OutputStreamWriter(System.out); 需要高效 BufferedReader br = new BufferedReader(new FileReader("a.txt")); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)):
还有诸多没说到,今后会补充,长期更新。
以上是关于java如何讲文件转化成流再单向生成的主要内容,如果未能解决你的问题,请参考以下文章