Java 的IO章-------(字符文件输入流、输出流)

前一章中整理了字节文件的输入流和输出流。在进行读文件时,若使用字节文件输入流(常会因为文件中包含了中英文字符,而且读取时字节的长度减少或者指定字符集有误等问题,会造成文件的乱码),而如果使用字符文件输入、输出流来进行读取,通常不会造成乱码。

1.字符文件输入流------Reader类

Reader类是一个抽象类,不能进行实例化,所以我们使用它的子类FileReader类进行实例化

package cn.sxt.io;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

/**
 * 测试文件字符输入流Reader
 * 1. 创建源
 * 2、选择流Reader,实现接口的类FileReader(Reader类可以实现读取字符,即使文件中同时包含了汉字和 
      英文字符都可以进行读取),此时若使用字节流读取可能会造成乱码问题,因为英文和中文所占的字节数 
      是不同的
 * 3、操作:定义字符数组,输入流.read(char[] buffer)读取操作,读取后进行打印
 * 4、释放资源
 * @author Administrator
 *
 */
public class TestFileReader {

	public static void main(String[] args){
		//1、创建源
		File file = new File("D:/java program/IO/src/cn/sxt/io/abc.txt");
		//2.选择流
		Reader reader = null;
		try {
			reader = new FileReader(file);
			//3.操作:定义字符数组,进行读取
			char[] buffer = new char[3];
			int length = -1;//定义实际读取长度
			try {
				while((length = reader.read(buffer))!=-1){
                     //将读取到的字符数组转化成字符串进行输出
					String str = new String(buffer,0,length);
					System.out.println(str);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				reader.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
}

2、字符文件输出流------------Writer类

Writer类是一个抽象类,我们使用它的子类FileWriter类进行实例化

package cn.sxt.io;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

/**
 * 1.创建源
 * 2、选择流Writer
 * 3、操作:先将字符串转为字符数组,String msg="要写的内容"; char[] buf = msg.toCharArray(); 
      然后写到输出流中 :输出流.writer(buf,0,buf.length);
 * 4.释放资源
 * @author Administrator
 *
 */
public class TestFileWriter01 {

	public static void main(String[] args){
		//1、创建源
		File file = new File("D:/java program/IO/src/cn/sxt/io/destWriter.txt");
		//2、选择流
		Writer  writer = null;
		try {
			 writer = new FileWriter(file);
			 //3、操作:先定义要写的字符串,将其转化为字符数组;再进行写
			 String msg = "我是计算机专业的student";
			 /*char[] flush = msg.toCharArray();
			 writer.write(flush, 0, flush.length);*/
			 //或者
			 writer.write(msg,0,msg.length());
			 writer.flush();//写完后进行内存的刷新
		}
		catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				writer.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值