涵蓋:文件→內存、內存→文件、文件→文件流式拷貝。所有方法獨立可複用。
import java.io.*;
public final class AccessTextFile {
/** 1. 讀取輸入流文本到StringBuffer */
public void readToBuffer(StringBuffer buffer, InputStream is) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line).append("\n");
}
}
/** 2. 將StringBuffer寫入輸出流 */
public void writeFromBuffer(StringBuffer buffer, OutputStream os) {
new PrintStream(os).print(buffer.toString());
}
/** 3. 流式拷貝:輸入流→輸出流(逐行) */
public void copyStream(InputStream is, OutputStream os) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
PrintWriter writer = new PrintWriter(new OutputStreamWriter(os));
String line;
while ((line = reader.readLine()) != null) {
writer.println(line);
}
writer.flush(); // 不關閉writer,由調用方管理外層流
}
/** 4. 文件到文件拷貝 */
public void copyTextFile(String inFilename, String outFilename) throws IOException {
try (InputStream is = new FileInputStream(inFilename);
OutputStream os = new FileOutputStream(outFilename)) {
copyStream(is, os);
} // try-with-resources自動關閉
}
public static void main(String[] args) throws IOException {
AccessTextFile test = new AccessTextFile();
int sw = 1; // 1=讀 2=寫 3=拷貝
switch (sw) {
case 1:
try (InputStream is = new FileInputStream("E:\\test.txt")) {
StringBuffer buf = new StringBuffer();
test.readToBuffer(buf, is);
System.out.println(buf);
}
break;
case 2:
test.writeFromBuffer(new StringBuffer("Only a test\n"), System.out);
break;
case 3:
test.copyTextFile("E:\\test.txt", "E:\\r.txt");
break;
}
}
}
InputStreamReader/OutputStreamWriter指定字符集(默認平台編碼)。try-with-resources自動關閉;流由調用方打開則由調用方關閉。BufferedReader.readLine()+PrintWriter.println()逐行處理,適合大文件。System.out的便捷輸出方法。三種模式覆蓋日常文本文件操作 90% 場景,代碼簡潔、健壯、易擴展。