码迷,mamicode.com
首页 > 其他好文 > 详细

使用字符流读写数据

时间:2017-03-26 20:32:50      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:reader   目录   转换   mic   void   读取   top   cep   tab   

-------------siwuxie095

   

   

   

   

   

   

工程名:TestRWCharStream

包名:com.siwuxie095.charstream

类名:RWByCharStream.java

   

   

打开资源管理器,在工程 TestRWCharStream 文件夹下,放入

一个文本:java.txt

   

java.txt 的内容:

   

技术分享

 

   

   

工程结构目录如下:

   

技术分享

   

   

   

   

   

代码:

   

package com.siwuxie095.charstream;

   

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");

//再创建一个文件输入流(字节流),传入 file

FileInputStream fis=new FileInputStream(file);

//使用 InputStreamReader 将字节流转化为字符流

//传入 fis 并指定字符集:UTF-8

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

 

 

//文件的输出流会自动创建文件 java_new.txt,不需要手动创建

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

//在对同一个文件进行读写 对同一段数据操作时,其编码设定一定要一致

OutputStreamWriter osw=new OutputStreamWriter(fos,"UTF-8");

 

 

//使用 InputStreamReader read() 方法读取数据

//传入 字符型数组,read()方法将数据填充到该数组

//先创建一个字符型数组,大小指定为 100

char input[]=new char[100];

 

int len=0;

 

 

//java.txt 的大小肯定大于100个字符,所以需要循环读取

//read()的返回值是整型,如果返回-1,则读取到文件末尾

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

//直接打印该字符型数组 input 会强制调用该数组的toString()方法

//自然而然的将字符数组转换成了字符串

//不过这种方法有瑕疵,输出的文本最后有冗余数据

//因为在文件末尾时,读取的数据不一定能填满100个字符

//System.out.println(input);

 

 

//也可以使用匿名对象 new String() 一个新的字符串对象,并传入input

//同时指定偏移量为 0(因为需要从数组的最开始获取),长度为 len

//

//注意:要根据读取到的实际的数据量来创建String

//这样,读取到文件末尾时,即使当前的数组没有被填满,如只填充了30

//创建String时也只会从这30个字符中读取,剩下的70个是之前读取的冗余数据

//就不会再被输出了

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

 

 

//直接从数组写入到输出流中

//传入数组,指定写入的偏移量和写入的长度

osw.write(input,0,len);

 

 

// 每获取一个String,就写入到输出流中

//String str=new String(input, 0, len);

//osw.write(str);

}

 

//读取完毕,关闭流

isr.close();

fis.close();

osw.close();

fos.close();

 

 

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

 

}

   

}

   

   

运行一览:

   

1)没有指定偏移量和长度时:

   

System.out.println(input);

System.out.println(new String(input));

   

技术分享

   

   

   

(2)指定偏移量和长度后:

   

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

   

技术分享

   

   

   

java_new.txt 的内容一览:

   

技术分享

   

   

   

运行后,工程结构目录一览:

   

技术分享

   

   

 

   

   

   

【made by siwuxie095】

使用字符流读写数据

标签:reader   目录   转换   mic   void   读取   top   cep   tab   

原文地址:http://www.cnblogs.com/siwuxie095/p/6623881.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!