IO流<字符流>FileWriter、FileReader

来源:互联网 发布:mac吉吉影音官方下载 编辑:程序博客网 时间:2024/05/21 15:06

IO

1、概述

IO流用来处理设备之间的数据传输,java对数据的操作是通过流的方式来操作的。Java用于操作流的对象都在IO包中。数据的最常见体现形式是:文件

2、流的分类

1、按操作数据分为两种:字节流和字符流

2、按流向分为:输入流和输出流。

3IO流常用基类

1)字节流的抽象基类:InputStreamOutputStream

2)字符流的抽象基类:ReaderWriter

注意:由这四个类派生出来的子类名称都是以其父类名作为子类名的后缀

如:InputStream的子类FileInputStream

Reader的子类FileReader

4、字符流

FileWriter类:

用来写入字符文件的便捷类

步骤:

  1、创建一个FileWriter对象,该对象一被初始化就必须要明确被操作的文件。而且该文件会被创建到指定目录下。如果该目录下已有同名文件,将会被覆盖。

其实第一步就是在明确数据要存放的目的地。

FileWriter fw=new FileWriter(“文件目录”);

     2、调用write方法将字符串写入到流中

fw.write(“aaaa”);

     3、刷新流对象中的缓冲中的数据,将数据刷到目的地文件中

fw.flush();

    4、关闭流资源,但是关闭之前会刷新一次内部缓冲中的数据,将数据刷到目的地中,和flush的区别,flush刷新后,流可以继续使用,close刷新后,会将流关闭

fw.close();

5、IO异常的处理方式

public class IOdemo {

public static void main(String[] args) {

//创建FileWriter引用对象

FileWriter fw=null;

try{

//初始化FileWrite对象,其实就是要指定要操作文件的目录

fw=new FileWriter("iodemo.txt");

//调用write方法将字符串写入流中

fw.write("hahaha");

//刷新流对象的缓冲中的数据,到目的文件中

fw.flush();

}catch(IOException e){

e.printStackTrace();

}finally{

try{

if(fw!=null)

fw.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

}

6、IO流文件的续写

在创建FileWriter对象时,传递一个true参数,代表不覆盖已有的文件,并在已有文件的末尾处进行数据续写。

FileWriter fw=new FileWriter(“操作文件路径”,true);

程序演示:

public class IOdemo {

public static void main(String[] args) { FileWriter fw=null;

try {

//初始化FileWriter对象,并传递一个true参数,代表不覆盖已有文件,并在已有文件末尾续写

fw=new FileWriter("IoDemo.txt",true);

//“\r\n”代表换行,即将会在下一行写入新的内容

fw.write("\r\nthank you!");

fw.flush();

catch (IOException e) {

e.printStackTrace();

}finally{

if(fw!=null)

try {

fw.close();

catch (IOException e) {

e.printStackTrace();

}

}

}

}

输出结果:

hello world!

thank you!

7、文本文件读取方式Reader

FileReader:用来读取字符文件的便捷类,此类的构造方法假定默认字符编码和默认字节缓冲区大小都适当的。要自己指定这些值,可以先在FileInputStream上构造一个InputStreamReader

FileReader用于读取字符流。要读取原始字节流,考虑使用FileInputStream

     方式一:

    1、创建一个文件读取流对象,和指定名称的文件相关联,要保证该文件是已经存在的,否则会发生FileNotFoundException异常。

   2、调用读取流的read方法。

read():一次读一个字符,而且会自动往下读。将读取的字符作为整数返回,如果已到达流的末尾,则返回-1.所以可以将返回值作为读取的结束条件。

   3、关闭读取流资源

程序演示:

class FileReaderDemo{

public static void main(String args[]){

//创建FileReader的引用对象

FileReader fr=null;

try {//初始化对象,并指定相关联文件

fr=new FileReader("iodemo.txt");

//调用read方法

int ch=0;

while((ch=fr.read())!=-1){//判断是否读到了文件的末尾

//read方法将读取的字符作为整数返回,所以要将返回值强转成字符型

System.out.println((char)ch);

}

catch (IOException e) {

e.printStackTrace();

}finally{

if(fr!=null)

try {

fr.close();

catch (IOException e) {

e.printStackTrace();

}

}

}

}

方式二:通过字符数组进行读取

read(char[] cbuf);

将字符读入数组,如果已到达流的末尾,则返回-1.其中cbuf是目标缓冲区。

定义一个字符数组,用于存储读到的字符,该read(char[])返回的是读到的字符个数。

程序:

private static void method_2(FileReader fr){

 try {

fr=new FileReader("iodemo.txt");

//定义数组用于临时存储读取的字符,数组长度一般定义成1024的整数倍

char[] buf=new char[1024];

int num=0;//num用于存放read方法的返回值,即读取的字符个数

while((num=fr.read(buf))!=-1){

//将数组buf中的元素以字符串形式显示,并且只取0-num之间的元素

System.out.println(new String(buf,0,num));

}

catch (IOException e) {

e.printStackTrace();

}finally{

if(fr!=null)

try {

fr.close();

catch (IOException e) {

e.printStackTrace();

}

}

}

文件读取练习:

1读取一个.java文件,并打印在控制台上

程序

class IOdemo{

public static void main(String args[]){

//创建FileReader的引用对象

FileReader fr=null;

try {

fr=new FileReader("D:\\Program Files\\workspace\\jihe\\src\\day17\\DateDemo.java");

char[] buf=new char[1024];

int num=0;

while((num=fr.read(buf))!=-1){

System.out.print(new String(buf,0,num));

}

catch (IOException e) {

e.printStackTrace();

}finally{

if(fr!=null)

try {

fr.close();

catch (IOException e) {

e.printStackTrace();

}

}

}

2、将c盘的一个文本文件复制到D

复制的原理:其实就是将c盘下的文件数据存储到d盘的一个文件中。

步骤:

1、在d盘创建一个文件,用于存储c盘文件中的数据

2、定义读取流和c盘文件关联

3、通过不断的读写完成数据存储。

4、关闭资源

程序:

class IOdemo{

public static void main(String args[]){

FileWriter fw=null;

FileReader fr=null;

try {

fw=new FileWriter("D:\\filewrite.txt");

fr=new FileReader("c:\\test.java");

char[] buf=new char[1024];//定义内存缓冲区

int num=0;

while((num=fr.read(buf))!=-1){

fw.write(buf,0,num);

fw.flush();

}

catch (IOException e) {

e.printStackTrace();

}finally{

if(fr!=null)

try {

fr.close();

catch (IOException e) {

e.printStackTrace();

}

if(fw!=null)

try {

fw.close();

catch (IOException e) {

e.printStackTrace();

}

}

}

0 0
原创粉丝点击