内容是:通过文件操作,完成一些小的需求。用来查询某文件或者某个文件里面的关键字
1.例子一
(1)需求:在一个指定的目录下,找到包含该关键字的所有文件
(2)要求输入:一个目录、一个关键词
(3)效果展示
(4)思路
输入一个目录和关键字,然后我们就去递归搜索该目录,第一步:先列出该目录下的所有子目录。第二步:遍历所有子目录;如果该子目录是文件,则读取该文件,判断是否包含关键字;如果是目录,则递归下去。第三步:如果该目录为空,结束该轮递归。
(5)完整代码
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
public class demo1 {
//在一个指定的目录下,找到包含一个关键词的文件
public static void main(String[] args) throws IOException {
//1.输入
Scanner in = new Scanner(System.in);
System.out.println("请输入一个文件目录:");
String s1 = in.next();
System.out.println("请输入要查询的关键词:");
String s2 = in.next();
//2.判断输入的路径是否正确
File file = new File(s1);
if(!file.isDirectory()) {
System.out.println("输入的目录不正确");
return;
}
//3.开始查询
findFile(file,s2);
}
private static void findFile(File file, String s2) {
//1.列出当前目录下的所有子目录
File[] files = file.listFiles();
//2.当前目录下为空,为递归出口
if(files==null) {
return;
}
for(File f : files) {
if(f.isFile()) {//是普通文件
String ss = f.getName();
//ss.equals(s2) 这是找到文件名一样的文件
if(ss.contains(s2)) {
System.out.println("找到包含'"+s2+"' 关键字的路径"+f.getAbsolutePath());//该文件包含关键字就打出出绝对路径
}
}else if(f.isDirectory()){//是目录,就递归下一层
findFile(f,s2);
}
}
}
}
2.例子二
(1)需求:把一个文件复制到指定路径下
(2)输入:一个被复制文件的绝对路径,和一个目的路径
(3)效果
其实,就是把一个文件路径,复制一份(换了一个路径和文件名字)
(4)思路
第一步:输入两个路径。第二步:检查两个路径是否合法。第三步:将文件内容逐步复制到目标文件下。
(5)思路
import java.io.*;
import java.util.Scanner;
public class demo2 {
public static void main(String[] args){
//1.输入
Scanner in = new Scanner(System.in);
System.out.println("输入要复制的文件路径:");
String s1 = in.next();
System.out.println("请输入要复制到的目录下");//包括文件的名字:也就是一个文件的绝对路径
String s2 = in.next();
//2.检查
File file1 = new File(s1);
if(!file1.isFile()) {//检查要复制的文件是否存在
System.out.println("文件不存在");
return;
}
//检查目标目录的上一级目录是否存在,file2.getParentFile()返回一个File对象,就可以直接判断该路径是否合法
File file2 = new File(s2);
if(!file2.getParentFile().isDirectory()) {
System.out.println("目标路径非法");
return;
}
try(InputStream inputStream = new FileInputStream(s1);OutputStream outputStream = new FileOutputStream(s2)) {
while (true) {
byte[] bytes = new byte[1024];
int n = inputStream.read(bytes);
if(n==-1) break;
outputStream.write(bytes,0,n);
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
3.例子三
(1)需求:查询指定文件路径下的带有关键字的文件内容
(2)输入:一个目标文件,和一个关键词(文件内容)
(3)效果
注意:这种查询的效率是非常的慢的,所以要指定非常细致的目录才能展示出效果
(4)思想
第一步:输入一个路径和关键词。第二步:判断路径的合法性。第三步:递归查询该目录的子目录;如果是路径,则继续递归;如果是文件,则直接查询文件内容。
(5)完整代码
import java.io.*;
import java.util.Scanner;
public class demo3 {
public static void main(String[] args) {
//1.输入
Scanner in = new Scanner(System.in);
System.out.println("输入要查询的文件路径:");
String s1 = in.next();
System.out.println("请输入要查询的文件内容关键字:");//包括文件的名字:也就是一个文件的绝对路径
String s2 = in.next();
//2.检查合法性
File file1 = new File(s1);
if(!file1.isDirectory()) {
System.out.println("查询目录非法");
return;
}
//3.递归查询
findFile(file1,s2);
}
private static void findFile(File file1, String s2) {
File[] files = file1.listFiles();
if(files == null) {
return;
}
for(File f : files) {
if(f.isFile()) {
find(f,s2);
}else if(f.isDirectory()) {
findFile(f,s2);
}
}
}
private static void find(File f, String s2) {
try(InputStream inputStream = new FileInputStream(f)) {
//StringBuilder s = new StringBuilder();//将文件的内容全部拼接在一个字符串上面
String s = new String();
while (true) {
int n = inputStream.read();
if(n==-1) break;
s+=(char)n;
}
if(s.indexOf(s2)>=0) {
System.out.println("找到了:"+f.getAbsolutePath());
}
}catch (IOException e) {
throw new RuntimeException(e);
}
}
}