Java針對文件進行的操作:文件系統操作,File類(file類指定的路徑,可以是一個不存在的文件)
文件內容操作? ? ?:? ? ? 流對象
分為兩類
(1)字節流? ? ?以字節為基本的讀寫單位的? ? ? ??
二進制文件? ? ? ? ?InputStream? ?OutputStream
(2)字符流? ? ? 以字符為基本的讀寫單位的? ? ? ? ? ? ? ?Reader? ? ?Writer
文本文件
文件內容的操作:
(1)打開文件? ? ? 每次打開一個文件,都會消耗指定進度文件描述符表上面的一個頂
(2)關閉文件? ? ? ? 文件描述符表,長度是有限的(不同系統,不一樣,也是可以配置)
(3) 讀文件? ? ? 硬盤->內存
讀文件的時候,還有一個很有用的工具類
Scanner??
掃描指定目錄,并找到名稱包含指定字符的所有普通文件(不包含目錄),并且后續詢問用戶是否要刪除文件
查找+刪除
文件中內容添加:
package io;import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;public class Demo08 {public static void main(String[] args) {try (Reader reader = new FileReader("d:/test.txt")){while(true) {int c = reader.read();if(c == -1){break;}char ch = (char)c;System.out.println(ch);}}catch (IOException e){e.printStackTrace();}}
}
package io;import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;public class Demo09 {public static void main(String[] args) {try(Writer writer = new FileWriter("d:/test.txt",true)){writer.write("你好世界你好世界");} catch (IOException e) {e.printStackTrace();}}
}
package io;import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;public class Demo10 {public static void main(String[] args) {try(InputStream inputStream = new FileInputStream("d:/test.txt")) {Scanner scanner = new Scanner(inputStream);scanner.next();}catch (IOException e){e.printStackTrace();}}
}
查找文件的關鍵詞
package io;import java.io.File;
import java.util.Scanner;public class Demo11 {public static void main(String[] args) {
//1.輸入必要信息Scanner scanner = new Scanner(System.in);System.out.println("請輸入要搜索的目錄: ");String rootPath = scanner.next();System.out.println("請輸入要查詢的詞: ");String searchWord = scanner.next();//2.構造File對象,檢查路徑是否合法File rootFile = new File(rootPath);if(!rootFile.isDirectory()) {System.out.println("輸入的路徑非法!");return;}//3.進行遞歸搜索searchFile(rootFile,searchWord);
}private static void searchFile(File rootFile,String searchWord) {//1.列出當前目錄中有哪些內容File[] files = rootFile.listFiles();if(files == null) {//空目錄,直接 返回return;}//2.遍歷目錄下的每個結果,進行判定for(File f: files) {//System.out.println("當前掃描文件為: "+ f.getAbsolutePath());if(f.isFile()) {//普通文件,就判定文件名是否包含 查詢詞String fileName = f.getName();if(fileName.contains(searchWord)){//當前文件即為所求System.out.println("找到匹配結果: "+ f.getAbsolutePath());}}else if(f.isDirectory()) {//針對子目錄進一步遞歸searchFile(f,searchWord);}}
}
}
字符類? Reader? Writer? 抽象類,不能直接new
?FileInputStream? ? ? ?FileOutputStream
1)打開文件? 構造方法(路徑)
2)讀文件(read)/寫文件 (write)
3)關閉文件(close)? 能夠使用try with resources
給定 路徑
給定 查詢詞
在路徑中查找,文件名中包含查詢詞文件
案例二:復制一個文件?
輸入一個路徑,表示要被復制的文件
輸入另一個路徑,表示要復制到的目標目錄
package io;import java.io.*;
import java.util.Scanner;
//案例二:復制一個文件
//
// 輸入一個路徑,表示要被復制的文件
//
// 輸入另一個路徑,表示要復制到的目標目錄
public class Demo012 {public static void main(String[] args) {// 1. 輸入必要的信息Scanner scanner = new Scanner(System.in);System.out.println("請輸入要復制的文件路徑: ");String srcPath = scanner.next();System.out.println("請輸入要復制到的目標路徑: ");String destPath = scanner.next();// 2. 驗證上述路徑是否合法.File srcFile = new File(srcPath);if (!srcFile.isFile()) {System.out.println("輸入的要復制的文件路徑非法!");return;}File destFile = new File(destPath);if (!destFile.getParentFile().isDirectory()) {System.out.println("輸入的要復制到的目標路徑非法!");return;}// 3. 讀寫文件try (InputStream inputStream = new FileInputStream(srcFile);OutputStream outputStream = new FileOutputStream(destFile)) {while (true) {byte[] bytes = new byte[1024];int n = inputStream.read(bytes);if (n == -1) {break;}outputStream.write(bytes, 0, n);}} catch (IOException e) {throw new RuntimeException(e);}}
}
運行結果: