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);}}
}
运行结果: