import java.io.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;/*** 功能:遍历指定jar包中class文件名并输出到文件中* 第一个参数输入:jar包或者需要搜索class的目录* 第二个参数输入:搜索信息输出文件*/
public class FindClassToFile {private static final List<String> list = new ArrayList<>();private static String FILE_NAME;public static void main(String[] args) throws IOException {if (args.length == 2) {String findPath = args[0];FILE_NAME = args[1];System.out.println(">>>搜索目录或者文件:" + findPath);System.out.println(">>>搜索信息输出文件:" + FILE_NAME);if (canCreateFile(FILE_NAME)) {findJarFromPath(findPath);write(FILE_NAME);} else {System.out.println(">>>请输入正确的输出文件路径");}} else {System.out.println("java -jar xxx.jar directory|jar infoFile");System.out.println("if you run java file in ide,you need add 'directory|jar infoFile' to Program arguments");}}/*** 创建输出文件** @param filePath* @return*/private static boolean canCreateFile(String filePath) {try {File file = new File(filePath);if (!file.exists()) {return file.createNewFile();} else if (!file.isFile()) {return false;} else {return true;}} catch (IOException e) {return false;}}/*** 将信息写到文件中** @param fileName*/private static void write(String fileName) {try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(fileName, true)))) {for (String s : list) {bw.write(s);bw.write("\n");}bw.flush();list.clear();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 遍历扫描目录或者文件(.jar后缀)* @param path* @throws IOException*/private static void findJarFromPath(String path) throws IOException {File file = new File(path);if (!file.exists()) {return;}if (file.getName().endsWith(".jar")) {readFileFromJar(file.getCanonicalPath());if (list.size() > 10000) {write(FILE_NAME);}}if (file.isDirectory()) {File[] files = file.listFiles();for (File f : files) {String ph = f.getCanonicalPath();System.out.println(ph);findJarFromPath(ph);}}}private static void readFileFromJar(String jarPath) throws IOException {list.add("------------------------------");list.add(jarPath);JarFile jarFile = new JarFile(jarPath);Enumeration<JarEntry> enumeration = jarFile.entries();String name;while (enumeration.hasMoreElements()) {JarEntry entry = enumeration.nextElement();name = entry.getName();if (getFalse(name)) {list.add(name);}}list.add("------------------------------");}private static boolean getFalse(String name) {int a = name.lastIndexOf(".");int b = name.lastIndexOf("/");if (a < b) {return false;}return true;}
}

遍历指定jar包中class文件名并输出到文件中相关推荐

  1. 将指定目录下的sql文件名写入到txt文件中

    2019独角兽企业重金招聘Python工程师标准>>> 前段时间需要把文件夹中所有sql文件整到一个文档中,进行MySQL数据库的批量导入用,所以写了下面的小程序. import j ...

  2. JavaWeb编程中如果jar包存在但显示无法输出,就在IDEA的项目发布中添加lib依赖!

    JavaWeb编程中如果jar包存在但显示无法输出,就在IDEA的项目发布中添加lib依赖! 第一步:点击设置选择项目结构 第二步:选择工件artifact,选子模块,然后再WEB-INF目录下添加l ...

  3. 利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件

    利用 exe4j 将 JAR 包制成免安装 JDK 的 EXE 文件 exe4j 的工作原理 EXE 制作教程   将 JAR 包制成能在 Windows 上直接运行的 EXE 文件,是很多 Java ...

  4. 批量替换一个文件中的文件名,例如将文件夹中s**_abnormal.jpg文件修改为s**_abnor.jpg

    文章涉及到StringAbout::开头的函数具体实现参考:string与Cstring字符串类型转换和其他操作总结 CProcessFile::开头的函数实现参考:文件读写操作工具类CProcess ...

  5. 根据文件后缀名移动文件 及 按照txt文件中的文件名移动需要的文件到新文件夹

    按照txt文件中的文件名移动需要的文件到新文件夹 import os import shutil ''' 程序目的:按照 目标文件名.txt 文件,从源文件夹 path1 中把 目标文件 挪到目标文件 ...

  6. POI:从Excel文件中读取数据,向Excel文件中写入数据,将Excel表格中的数据插入数据库,将数据库中的数据添加到Excel表

    POI 简介: POI是Apache软件基金会用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程序对Microsoft Office格式档案读和写的功能. ...

  7. 将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件 中

    package again;import java.io.*;/* 1.编写一个程序,将 a.txt 文件中的单词与 b.txt 文件中的单词交替合并到 c.txt 文件 中,a.txt 文件中的单词 ...

  8. CodeSmith实用技巧(八):生成的代码输出到文件中

    在CodeSmith中,要把生成的代码文件输出到文件中,你需要在自己的模版中继承OutputFileCodeTemplate类.<?xml:namespace prefix = o ns = & ...

  9. idea中ctrl+shift+f(在文件中查找)失效,全图文解决方案

    idea中ctrl+shift+f(在文件中查找)失效,全图文解决方案 一.Win11微软键盘 原因:因为输入法默认指定ctrl+shift+f是简体与繁体中文输入之间的切换,所以在idea中按键无效 ...

最新文章

  1. 2016计算机二级java_2016计算机二级JAVA练习题及答案
  2. NB-IoT与LoRa,两马领跑物联网竞赛,谁将最终胜出?
  3. java--迭代(一)Iterator和Iterable接口
  4. udhcp server端源码分析1--文件组织结构
  5. 二、WPF datagrid 特定行变色
  6. ansible自动化管理
  7. linux7补丁安全,CentOS自动打重要安全补丁
  8. 课时53.video标签(掌握)
  9. 简易中控紫猫插件版(3)压缩包使用说明
  10. Source Insight使用技巧
  11. enum和enum class
  12. 数组的合并和升序排列_每日“力扣”系列10 下一个排列
  13. QQ 新增“语音进度条”;滴滴顺风车负责人道歉;华为研发费将超 1000 亿美元 | 极客头条...
  14. MySQL-第八篇MySQL内置函数
  15. 1047 : 对数表
  16. Win10 安装IE11失败错误代码0x80070490(未解决)
  17. 用计算机名共享打印机不能打印,共享打印机无法打印怎么办解决教程
  18. 测试大纲法与 场景法
  19. 2018 年 8 月面试路:6 天 21 家公司
  20. android平板投屏,安卓手机投屏到平板

热门文章

  1. c++中内存拷贝函数(C++ memcpy)详解
  2. 查看进程占用的句柄数
  3. 如何防御网站被ddos攻击 首先要了解什么是流量攻击
  4. 屏幕录制和视频剪辑Filmage Screen
  5. 注册苹果开发者帐号 用什么银行的什么卡好? 收款帐号呢?
  6. getAttribute()用法
  7. vue设置scrollTop不起作用
  8. LZ77压缩算法原理剖析
  9. chrome无法添加.crx文件(扩展程序)
  10. TcPlayer.js 实现文字朗读