專欄:JavaEE初階起飛計劃
個人主頁:手握風云
目錄
一、Java文件內容寫入
1.1. OutputStream
二、字符流讀取和寫入
2.1. Reader
2.2. Writer
三、示例練習
3.1. 查找文件功能
一、Java文件內容寫入
1.1. OutputStream
????????OutputStream同樣只是?個抽象類,要使用還需要具體的實現類。我們現在還是只關?寫入文件中,所以使用FileOutputStream。int參數類型是寫入要給字節的數據;byte[]參數類將b這個字符數組中的數據全部寫?os中。
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class Demo1 {public static void main(String[] args) {try (OutputStream outputStream = new FileOutputStream("./test.txt")) {// “你好”的字符編碼outputStream.write(0xe4);outputStream.write(0xbd);outputStream.write(0xa0);outputStream.write(0xe5);outputStream.write(0xa5);outputStream.write(0xbd);} catch (IOException e) {e.printStackTrace();}}
}
? ? ? ? 但上面寫的代碼,每次打開文件,都會清空原有的內容,我們可以在write方法后面加一個參數append,就能從文件末尾追加內容。
二、字符流讀取和寫入
2.1. Reader
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Demo3 {public static void main(String[] args) {try (Reader reader = new FileReader("./test.txt")) {while (true) {int ch = reader.read();if (ch == -1) {break;}char c = (char) ch;System.out.println(c);}} catch (IOException e) {e.printStackTrace();}}
}
? ? ? ? 我們同樣也可以使用字符數組來進行讀取。
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Demo3 {public static void main(String[] args) {try (Reader reader = new FileReader("./test.txt")) {while (true) {char[] chars = new char[1024];int c = reader.read(chars);if (c == -1) {break;}for (int i = 0; i < c; i++) {System.out.println(chars[i]);}}} catch (IOException e) {e.printStackTrace();}}
}
2.2. Writer
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Demo4 {public static void main(String[] args) {try (Writer writer = new FileWriter("./test.txt")) {writer.write("你好世界");} catch (IOException e) {e.printStackTrace();}}
}
三、示例練習
3.1. 查找文件功能
????????掃描指定目錄,并找到名稱中包含指定字符的所有普通文件(不包含目錄),并且后續詢問?戶是否要刪除該文件。
import java.io.File;
import java.util.Scanner;public class Demo5 {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("請輸入要搜索的目錄:");String dir = in.nextLine();System.out.println("請輸入要查詢的文件名:");String filename = in.nextLine();// 判斷目錄是否存在File rootFile = new File(dir);if (!rootFile.isDirectory()) {System.out.println("目錄不存在!");return;}// 利用遞歸進行搜索searchFile(rootFile, filename);}private static void searchFile(File rootFile, String filename) {// 列出rootFile中的內容File[] files = rootFile.listFiles();if (files == null) {// 空目錄return;}// 遍歷files數組,判斷元素類型for (File file : files) {if (file.isDirectory()) {searchFile(file, filename);} else if (file.isFile()) {if (file.getName().contains(filename)) {tryDel(file);}}}}private static void tryDel(File file) {System.out.println("準備刪除文件:" + file.getAbsolutePath());Scanner in = new Scanner(System.in);System.out.println("是否確認刪除?(Y/N)");String choice = in.nextLine();if (choice.equalsIgnoreCase("Y")) {file.delete();System.out.println("刪除成功");} }
}