IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> java操作磁盘文件【指定类型、搜索位置、粘贴复制,jar包的打印两种方式】 -> 正文阅读

[Java知识库]java操作磁盘文件【指定类型、搜索位置、粘贴复制,jar包的打印两种方式】

任务需求:

1、指定搜索文件的目录

2、指定文件的类型【.java】

3、将文件里的所有【.java】文件复制到一个自己制定好的存放位置

需求分析:

  1. 搜索文件,需要创建一个被搜索文件的File对象

  2. 需要对文件对象进行判断是否为文件夹,使用【isDirectory()】方法,返回true

  3. 需要对文件的类型进行判断,使用到【isFile()】方法,返回true

  4. 在文件目录里没有找到文件,需继续重复查找操作,使用到【递归】调用自身

  5. 复制文件到指定的文件目录,用到第三方IO框架【commons-io-2.11.0.jar】中的【FileUtils.copyFileToDirectory()】方法

  6. 定义了四个方法来完成:
    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;

/**
 * 目标:完成一个指定的目录下指定.java文件复制到指定的文件位置
 */
public class Finder {
    /**
     * 创建主方法入口
     * @param args
     */
    public static void main(String[] args) {
        // 创建Finder对象
        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);
    }

    /**
     * 2、定义指定文件类型、被复制路径,拷贝路径
     */
    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对象
        File files = new File(sourcePath);
        // 判断是不是文件夹
        if(files.isDirectory()){
            /**
             * 加载files文件中的指定类型的文件
             * 参数一:搜索的文件类型
             * 参数二:创建的File对象
             * 参数三:返回收集的结果集
             */
            loadFiles(fileType,files,fileList);
        }
        return fileList;
    }

    /**
     * 加载files对象文件中的指定类型的文件
     * 参数一:搜索的文件类型
     * 参数二:创建的File对象
     * 参数三:返回收集的结果集
     */
    private static void loadFiles(String fileType, File file, List<File> fileList) {
        // 判断传入的files文件对象数组
        File[] files = file.listFiles();
        // 判断文件对象是否为空
        if(files.length <= 0 || files == null)return;
        // 遍历files判断是否为文件
        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) {
        // 判断文件集合是否为null或空
        if(fileList == null || fileList.isEmpty()){
            System.out.println("fileList结果集为空哦!");
            return;
        }
        // 创建一个目标File
        File destFile = new File(destPath);
        // 遍历结果集合
        for (File file : fileList) {
            // 通过第三方的IO框架进行复制文件
            try {
                FileUtils.copyFileToDirectory(file,destFile);
                System.out.println("拷贝成功,目标路径:"+destFile.getAbsolutePath());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

在RunyDebug Configurations中也可以指定main的赋值【我也不懂】
在这里插入图片描述

文件的打包成jar包两种方式

1、方式一、原始的使用终端命令完成

  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 .
    

    终端无返回任何信息,任何查看根目录看生成的文件【代表编译成功】

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9BgqTXwL-1646443311144)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\2、生成class.jpg)]

  2. 步骤二、工程根目录创建一个文件清单文件【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

  3. 返回终端,输入下面的命令完成生成 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文件生成成功会在根目录显示如下文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5NqVVimw-1646443311145)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\3、jar包.jpg)]

  4. 在终端测试 .jar 文件是否可用

    终端输入如下命令运行

    java -jar Finder.jar .java F:\Java(黑马2022)\javaSE\源码\day1\code F:\java
    

2、方式二、通过IDEA工具完成打包

  1. 步骤一:IDEA打包

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mmsns8LB-1646443311145)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\4、IDEA打包.jpg)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5tbc0767-1646443311146)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\5、打包步骤-16464415148011.jpg)]

  2. 步骤二、选择打包的对象

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gw1YXyzN-1646443311146)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\6、选择打包的对象.jpg)]

    点击ok回到上一步再点ok

  3. 点击顶部的Build

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A8uvHCU6-1646443311147)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\7、选Build.jpg)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oO49qL5A-1646443311147)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\8、再点击.jpg)]

  4. 查看生成的路径

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sc3IyKO9-1646443311147)(D:\大二课程学习(2021-8-11)\正则表达式\笔记\image\9、生成路径.jpg)]

  5. 找到【file-app.jar】文件复制到当前项目的根目录

  6. 在终端输入运行命令【即可成功】

    java -jar file-app.jar .java F:\Java(黑马2022)\javaSE\源码\day1\code F:\java
    
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:48:23  更:2022-03-06 12:50:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:24:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码