欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

[Java]Java文件读写,

来源: javaer 分享于  点击 30492 次 点评:62

[Java]Java文件读写,


相对于C++中的文件流操作,Java可以直接调用系统库中提供的方法,简单的多。

读操作:

代码:

        准备代码:(由文件名获取BufferrdReader对象)

String file_name = "test.txt";    //String类型变量file_name的值为所读取的文件的文件名(包括后缀)
File file = new File(file_name);    //用String类型变量初始化一个File类对象
FileInputStream fis = new FileInputStream(file);    //用File类对象初始化一个FileInputStream对象
/*FileInputStream对象可用String类型初始化,亦可省略第二行代码,直接FileInputStream fis = new FileInputStream(file_name);*/
InputStreamReader isr = new InputStreamReader(fis);
BufferedReader br = new BufferedReader(isr);

//最后得到BufferedReader类型对象br

        读取代码:(通过调用BufferrdReader对象的方法进行文件读操作)

br.readLine();//从文件流中读取一行数据(读到回车"\r\n"为止),返回String类型
//可以通过System.out.println(br.readLine());在控制台查看读取的数据
//br.readLine()不包括回车字符"\r\n",对于只有回车的一行,br.readLine()==""(引号内部为空)
//由于br.readLine()的返回值为String类型,通过Java系统库提供的强大的String方法可以对读取的一行数据
//进行格式化拆分、整理(如按空格隔开数据,可用String类型的split方法将数据拆分存入String类型数组)

br.close();//当文件读取完毕时,务必写入该代码,确保文件正常关闭

解释:

读操作是从文件开始的,Java提供了File类,可用String类型的文件名作为形参初始化File对象,如File file=new File(“test.txt”),但这个File类对象只能访问这个文件的外部特性,即查看文件属性时能看到的东西,不能查看文件内的信息。

在C++中我们使用文件流来读写文件,Java也是如此。Java提供了FileInputStream类(译作“文件输入流”)(继承自InputStream类),通过FileInputStream fis=new FileInputStream(file),调用形参为File对象的构造函数(也有形参为String的构造函数,直接输入需要读写的文件名亦可)。之后fis变成输入流对象,通过调用fis的方法可以发现,read(byte [])方法可以从文件中读取一个byte类型数组的字节,并写入该数组中。

通过FileInputStream对象,可以对文件进行字节读取

 

这样虽然可以读取文件,但是还有很多问题。对于Ascii码中的字符,字节读取得到的是对应的int数组,转换成Ascii码较为麻烦。对于中文等一个字节表示不了的文字,问题更多。我们需要对文件进行字符读取,将文件内的信息转化为char[]或String类型。

 

我们将用到转化类InputStreamReader类(继承自Reader类),即将字节输入流转化为字符输入流。通过InputStreamReader isr=new InputStreamReader(fis),用FileInputStream对象初始化InputStreamReader对象。isr的方法即可将文件数据读入char[]数组中。

 

最后我们再用InputStreamReader对象初始化BufferedReader对象,即BufferedReader br=new BufferedReader(isr),Buffered的意思是“缓冲的”,意义是在内存中开辟一个缓冲区,先将文件数据读入缓冲区,再从缓冲区中将数据读入Java,目的是使读写速度加快。BufferedReader对象的方法比InputStreamReader对象的方法多了一个很重要的readLine方法,它将所读的一行数据(到回车为止)以String类型的形式返回。由于Java提供了很多String对象的方法,所以readLine方法对于数据的处理意义重大。

 

笔者在代码中强调了关闭文件对象的重要性,即br.close();

而前面声明的 FileInputStream类对象fis 和 InputStreamReader类对象isr 都有close方法,为什么不用关闭呢?

因为它们之间有嵌套关系:

BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(new File(file_name))));

对最后生成的对象br调用close方法后,Java会自动调用生成该对象的其他对象的close方法。

 

写操作:

与读操作同理,只是将Input变Output、Reader变Writer

String file_name = "test.txt";
File file = new File(file_name);
FileOutputStream fos=new FileOutputStream(file);
OutputStreamWriter osw=new OutputStreamWriter(fos);
BufferedWriter bw=new BufferedWriter(osw);
String str = "xxx";
bw.write(str);//将str中的字符写入文件(不自动回车)

bw.newLine();//在文件中写入一个回车,可用bw.write("\r\n");代替

bw.close();//关闭文件

 

 

 

相关文章

    暂无相关文章
相关栏目:

用户点评