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

Java操作文件简谈

2015-08-30 23:03 375 查看
传说很久以前的Java是不支持对文本文件的处理的, 后来为了弥补这个遗憾而新引入了Reader和Writer两个抽象类.

最常用的就是Writer中的write(char[] ch,int off,int length)/flush()/close()以及Reader中的read(char[] ch,int off,int length)和close()方法都是抽象方法.

子类分别实现他们. 例如: FileReader和FileWriter类.

简单的读取文本文件的内容可以这样实现:

import java.io.FileReader;
public class Test {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("d://java.txt");
int ch = 0;
while ((ch = fr.read()) != -1) {
System.out.print((char) ch+""); }
} catch (Exception e) {
e.printStackTrace();
System.out.println("操作文件时候出问题了");
}
}
}但是这样读出来的文件是按照字符读出来的, 阅读起来不方便, 可以增加判定条件, 改为:
import java.io.FileReader;

public class Test {
public static void main(String[] args) {
try {
FileReader fr = new FileReader("d://java.txt");

int ch = 0;
while ((ch = fr.read()) != -1) {
System.out.print((char) ch+"");
if(ch == 0){
System.out.println();
}
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("操作文件时候出问题了");
}
}
}其中, read方法返回读取到的下个字符, 但是在上面的代码中实现按行读取还得做判断, 岂不是很麻烦. 所以, 我们可以使用BufferedReader对Reader来进行封装, 这样不仅可以按
行读取文本内容(readLine()), 还能提高读取速度. 例如:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;

public class Test {
public static void main(String[] args) {
try {
BufferedReader br =
new BufferedReader(new InputStreamReader(new FileInputStream("d://java.txt")));
String data = "";
while((data = br.readLine()) != null){
System.out.println(data);
}
} catch (Exception e) {
e.printStackTrace();
System.out.println("操作文件时候出问题了");
}
}
}Reader是读取文件内容, 那么很理所应当的Writer就是要向文件中写内容, 但是在写文件的过程中, 需要注意缓冲区的问题, 这个是为了提高效率, 但是在某些情况下可能会导致缓
冲区未能正常刷新(例如下面的例子), 这样就需要我们主动调用flush()方法刷新缓冲区:

import java.io.FileWriter;

public class Test {
public static void main(String[] args) {
try {
FileWriter fw = new FileWriter("d://c.txt");
String data = "hello,Mr Shu!!!!";
fw.write(data, 0, data.length());
// fw.flush();
} catch (Exception e) {
e.printStackTrace();
System.out.println("操作文件时候出问题了");
}
}
}

上面的代码执行后, c.txt中并没有数据, 那是因为缓冲区未能正常刷新, 可以去掉上面的fw.flush();前的注释.

import java.io.FileWriter;

public class Test {
public static void main(String[] args) {
FileWriter fw = null;
try {
fw = new FileWriter("d://c.txt");
String data = "hello,Mr Shu!!!!";
fw.write(data, 0, data.length());
// fw.flush();
} catch (Exception e) {
e.printStackTrace();
System.out.println("操作文件时候出问题了");
} finally {
try{
fw.close();
}catch(Exception ex){
ex.printStackTrace();
System.out.println("系统好像出问题了");
}

}
}
}

注释掉了fw.flush();但是文件中却有内容, 这就说明正常的关闭流是可以自动刷新缓冲区的. 所以, 一般情况下都尽可能地在必要的地方关闭文件流.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 文件操作