您的位置:首页 > 编程语言 > Java开发

Java I/O流 (一)---文件流的基本操作

2014-04-18 23:00 232 查看
java I/O流是J***A重要内容之一,它对我们进行常见的文件操作至关重要。就Java流写写自己的学习心得。

首先java流是由java.io包中定义的类实现的,需要对流操作时候,首先要加上:import java.io.*。

java流中4个基本的抽象类如下图,其余的类都是从这几个类中派上出来的以及这几个类的类层次如下:

























以上大体说明了J***A中流的层次结构。接下来说说java中经常采用的两类流:实体流和装饰流。实体流是指直接连接数据源的流类,它可以独立使用;而装饰流不直接连接数据源,而是以实体流对象为基础建立的流类。java i/0中我们经常针对的是文件操作,接下来就以文件为例主要说说这两类

一、java实体流FileInputStream,FileOutputStream,FileReader,FileWriter

1.文件字节流FileInputStream,FileOutputStream

(1)文件输入流FileInputStream类:我们采用以下方式打开一个已经存在的文件:

FileInputStream fileStream=new FileInputStream(new File(String filename));当filename不含带路径时候,就打开当前目录下面的文件;如果filename含带路径,就在指定的路径下面打开文件。

打开文件以后,使用read()方法一个字节一个字节的读取文件内容;当文件读完以后,采用close()方法关闭文件流即可。以下是一个从文本文件中读取数据并且显示出来的例子:

import java.io.*;

classFileInputStreamDemo1 {

public static voidmain(String[] args)
{

try {

File file = newFile("test.txt"); //创建文件对象

//使用文件对象创建文件输入流对象,相当于打开文件

FileInputStream fis = new FileInputStream(file);

for (int i =
0; i < file.length(); i++)
{

char ch =
(char)(fis.read()); //循环读取

System.out.print(ch);

}

System.out.println();

fis.close(); //关闭流

} catch (FileNotFoundException fnfe)
{

System.out.println("文件打开失败。");

} catch (IOException ioe)
{

ioe.printStackTrace();

}

}}

在上述例子中,可以通过file.length()来判断是否已经到达文件末尾。

(2)文件输出流FileOutputSream:我们采用以下方式将数据写入到文件中去

FileOutputStream filestream=new FileOutputStream(new File(String filename));这些含义均和上面FileInputStream类相对应。需要说明的是FileOutputStream类中还有另外一个构造方法:

FileOutputStream(File file, booleanappend)

当参数append为true的时候表明追加文件内容,参数为false的时候表示不追加文件内容。

接下来用public
void write(byte b[],
int off,int len); 写入内容。为了防止无法写入的问题,我们一般在这个方法后面采用flush()方法进行强行写入,写完以后采用close()方法关闭对象。具体实例如下:

import java.io.*;

class FileOutputStreamExample{

public static void main(String[] args)
{

try {

String str="好好学习Java";

byte[]
words = str.getBytes();//将字符串转化成字节数组

OutputStream fos =
new FileOutputStream("Output.txt ");

fos.write(words,
0, words.length);

System.out.println("Text文件已更新!");

fos.close();

} catch
(IOException obj) {

System.out.println("创建文件时出错!");

}



} }

2.文件字符流FileReader,FileWriter(操作流程和字节流相同)

(1)输入流FileReader类:没有什么特别的方法就不说了

(2)输出流FileWriter类:特别提到,这里用有一个方法void
write(String str) throws IOException,这个方法能够写入字符串。在这里面顺便比较一下Writer类和OutputStream类中flush()方法的区别:在OutputStream类的子类中并没有对父类的这一个方法进行实现;但是Writer类中的flush()方法是一个抽象方法,它的子类都对这个方法进行了实现。无论是使用字节流还是字符流进行输出的时候,我们一般都加上这个方法,这样可以方法数据无法写入到输出流中去。

二、java装饰流

1.缓冲流BufferedReader,BufferedWriter类

(1)BufferedReader类:装饰流的创建是先创建一个实体流,然后在创建一个装饰流。该类创建如下:

FileReader filereader=new FileReader(new File(String filename));

BufferedReader bfReader=new BufferedReader(filereader);

在这个类中最常用方法是String readLine()方法,它从缓冲输入流中读取一行字符,并且以字符串的形式放回。下面看看这个流的使用实例:

publicclassRraderDemo

{

public staticvoidmain(String[] args) throws IOException

{

File file= newFile("test.txt");

//通过文件对象创建文件输入流对象

FileReaderfr= newFileReader(file);

//将文件读取流包装成缓冲输入流

BufferedReaderbr= newBufferedReader(fr);



String str;

while((str= br.readLine())
!= null) //逐行读取数据

{

System.out.println(str);

}

br.close(); //关闭流

fr.close(); //关闭流

}



}

(2)BufferedWriter类:它最常用的方法是void write(String str)和void newLine()。后面这个方法是将回车换行符写入到流中,必须捕获异常IOException

2.数据流DataInputStream,DataOutputStream

这两个类提供了java读写基本数据类型int,byte,boolean,long,float,double,short,char的功能。它们对文件操作的时候要分别依附于FileInputStream和FileOutputStream这两个实体流。

通过上述介绍的内容,我们就可以实现对文件的基本操作,接着会在后续介绍J***A I/0流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: