任务需求:
1、指定搜索文件的目录
2、指定文件的类型【.java】
3、将文件里的所有【.java】文件复制到一个自己制定好的存放位置
需求分析:
-
搜索文件,需要创建一个被搜索文件的File对象 -
需要对文件对象进行判断是否为文件夹,使用【isDirectory()】方法,返回true -
需要对文件的类型进行判断,使用到【isFile()】方法,返回true -
在文件目录里没有找到文件,需继续重复查找操作,使用到【递归】调用自身 -
复制文件到指定的文件目录,用到第三方IO框架【commons-io-2.11.0.jar】中的【FileUtils.copyFileToDirectory()】方法 -
定义了四个方法来完成: 1、main主方法,用于调用 copyAllFiletoDestDir()方法 2、copyAllFiletoDestDir()方法,根据文件类型,搜索目录,目的目录来调用searchFiles()搜索指定的文件,copyFiles()完成复制文件 3、searchFiles()方法,根据传递过来的类型和搜索目录,查询遍历目录对象,判断文件类型是否符合,结果返回一个List 4、copyFiles()方法,copyAllFiletoDestDir()中调用的搜索方法返回的结果传递过与指定的目录,通过第三方的框架一句代码完成复制操作
示例代码
package com.zcl.d3_fileDemo;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Finder {
public static void main(String[] args) {
Finder finder = new Finder();
String fileType = args[0];
String sourcePath = args[1];
String destPath = args[2];
System.out.println("搜索的路径:"+sourcePath+",指定的文件类型:"+fileType+"目标路径:"+destPath);
copyAllFiletoDestDir(fileType,sourcePath,destPath);
}
public static void copyAllFiletoDestDir(String fileType,String sourcePath,String destPath){
List<File> fileList = searchFiles(fileType,sourcePath);
System.out.println("返回的查询数量:"+fileList);
copyFiles(fileList,destPath);
}
private static List<File> searchFiles(String fileType, String sourcePath) {
List<File> fileList = new ArrayList<>();
File files = new File(sourcePath);
if(files.isDirectory()){
loadFiles(fileType,files,fileList);
}
return fileList;
}
private static void loadFiles(String fileType, File file, List<File> fileList) {
File[] files = file.listFiles();
if(files.length <= 0 || files == null)return;
for (File f : files) {
if(f.isFile() && f.getName().endsWith(fileType)){
System.out.println("我找到文件啦");
fileList.add(f);
System.out.println("找到的文件:"+ fileList);
}else if(f.isFile() && !f.getName().endsWith(fileType)){
System.out.println("哦,文件类型不对上");
continue;
}else{
System.out.println("我再努力查找以下");
loadFiles(fileType,f,fileList);
}
}
}
private static void copyFiles(List<File> fileList, String destPath) {
if(fileList == null || fileList.isEmpty()){
System.out.println("fileList结果集为空哦!");
return;
}
File destFile = new File(destPath);
for (File file : fileList) {
try {
FileUtils.copyFileToDirectory(file,destFile);
System.out.println("拷贝成功,目标路径:"+destFile.getAbsolutePath());
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
在RunyDebug Configurations中也可以指定main的赋值【我也不懂】
文件的打包成jar包两种方式
1、方式一、原始的使用终端命令完成
-
步骤一、到文件的根目录【模块下】,搜索栏输入cmd进入终端命令 输入编译终端命令 javac:是编译工具 -cp: -lib/commons-io-2.11.0.jar:是第三方的开发工具 -encoding utf-8:是指定编码的格式 src/com/zcl/d3_fileDemo/Finder.java:是需要编译的文件路径 -d:-d表示指定编译文件输出地址 .表示当前目录 javac -cp lib/commons-io-2.11.0.jar -encoding utf-8 src/com/zcl/d3_fileDemo/Finder.java -d .
终端无返回任何信息,任何查看根目录看生成的文件【代表编译成功】 -
步骤二、工程根目录创建一个文件清单文件【MAINFAST.MF】,下入下面的内容 打包成可执行程序必须要这个文件 Main-Class: com\zcl\d3_fileDemo.Finder:Main-Class为main方法所在的类,注意要带上包名,如果没有包名则可以忽略 Class-Path: lib/commons-io-2.11.0.jar:第三方依赖路径,用到了第三方依赖则需要配置,否则不需要 冒号:后面必须要有一个空格,以及最后一定要空一行,否则会报加载不到主类错误
Main-Class: com\zcl\d3_fileDemo.Finder Class-Path: lib/commons-io-2.11.0.jar
-
返回终端,输入下面的命令完成生成 jar 包 jar -cvfm Finder.jar MAINFAST.MF com/zcl/d3_fileDemo/*.class lib/commons-io-2.11.0.jar
jar命令解释 -c 创建新的 JAR 文件包
-t 列出 JAR 文件包的内容列表
-x 展开 JAR 文件包的指定文件或者所有文件
-u 更新已存在的 JAR 文件包 (添加文件到 JAR 文件包中)
[vfm0M] 中的选项可以任选,也可以不选,它们是 jar 命令的选项参数
-v 生成详细报告并打印到标准输出
-f 指定 JAR 文件名,通常这个参数是必须的
-m 指定需要包含的 MANIFEST 清单文件
-0 只存储,不压缩,这样产生的 JAR 文件包会比不用该参数产生的体积大,但速度更快
-M 不产生所有项的清单(MANIFEST〕文件,此参数会忽略 -m 参数
[jar-文件] 即需要生成、查看、更新或者解开的 JAR 文件包,它是 -f 参数的附属参数
[manifest-文件] 即 MANIFEST 清单文件,它是 -m 参数的附属参数
[-C 目录] 表示转到指定目录下去执行这个 jar 命令的操作。它相当于先使用 cd 命令转该目录下再执行不带 -C 参数的 jar 命令,它只能在创建和更新 JAR 文件包的时候可用。
*.class 这里为编译之后的.class文件的路径,注意一定要和类的包名一致(如果没有包名,则可以忽略),否则也会报找不到主类的错误,也就是说如果你的类的包名为file.demo,那么你编译输出的class文件路径也必要为file/demo/xx.class 否则就会报错
jar文件生成成功会在根目录显示如下文件 -
在终端测试 .jar 文件是否可用 终端输入如下命令运行 java -jar Finder.jar .java F:\Java(黑马2022)\javaSE\源码\day1\code F:\java
2、方式二、通过IDEA工具完成打包
-
步骤一:IDEA打包 -
步骤二、选择打包的对象
点击ok回到上一步再点ok
-
点击顶部的Build -
查看生成的路径 -
找到【file-app.jar】文件复制到当前项目的根目录 -
在终端输入运行命令【即可成功】 java -jar file-app.jar .java F:\Java(黑马2022)\javaSE\源码\day1\code F:\java
|