每次需要操作文件的时候,总是一头雾水,不知道到底要用哪个类,怎样用。这里就稍微整理一下,以便后续查阅。
一、概述
文件类File本身不提供文件内容的操作,只提供文件属性的操作,如是否是文件夹,是否可读等等。
文件内容的操作,主要有两种方式,一种是流(字节)操作,另一种是字符操作。下表是文件类的预览表(摘自:http://tutorials.jenkov.com/java-io/overview.html):
Byte Based | Character Based | |||
Input | Output | Input | Output | |
Basic | InputStream | OutputStream | Reader InputStreamReader | Writer OutputStreamWriter |
Arrays | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
Files | FileInputStream RandomAccessFile | FileOutputStream RandomAccessFile | FileReader | FileWriter |
Pipes | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
Buffering | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
Filtering | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
Parsing | PushbackInputStream StreamTokenizer | PushbackReader LineNumberReader | ||
Strings | StringReader | StringWriter | ||
Data | DataInputStream | DataOutputStream | ||
Data - Formatted | PrintStream | PrintWriter | ||
Objects | ObjectInputStream | ObjectOutputStream | ||
Utilities | SequenceInputStream |
注:
1、流(字节)操作的基类是InputStream和OutStream, 字符操作的基类是Reader和Writer
2、Buffering的类是为了提高读取效率,一次读取一大块数据,进行缓存。
二、实例代码
1、逐行读取文件内容
BufferedReader reader = new BufferedReader(new FileReader(
"filePath"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
2、写入字符串到文件
OutputStream o = new FileOutputStream(outFile);
OutputStreamWriter w = new OutputStreamWriter(o);
w.write("string");
w.flush();
w.close();