如何从Jar文件中提取所有可用的类,并在经过一些简单处理后将输出转储到txt文件。
例如,如果我运行jar tf commons-math3-3.1.6.jar,输出的一个子集将是:
org/apache/commons/math3/analysis/differentiation/UnivariateVectorFunctionDifferentiator.class
org/apache/commons/math3/analysis/differentiation/FiniteDifferencesDifferentiator$2.class
org/apache/commons/math3/analysis/differentiation/SparseGradient$1.class
org/apache/commons/math3/analysis/integration/IterativeLegendreGaussIntegrator$1.class
org/apache/commons/math3/analysis/integration/gauss/LegendreHighPrecisionRuleFactory.class
org/apache/commons/math3/analysis/integration/gauss/BaseRuleFactory.class
org/apache/commons/math3/analysis/integration/gauss/HermiteRuleFactory.class
org/apache/commons/math3/analysis/integration/gauss/LegendreRuleFactory.class
org/apache/commons/math3/analysis/integration/gauss/GaussIntegratorFactory.class我想把所有的/转换成.
以及$ to .
最后,我还想删除出现在每个字符串末尾的.class。
例如:
org/apache/commons/math3/analysis/differentiation/FiniteDifferencesDifferentiator$2.class会变成
org.apache.commons.math3.analysis.differentiation.FiniteDifferencesDifferentiator.2发布于 2016-10-15 16:38:45
String path = "org/apache/commons/math3/analysis/integration/gauss/BaseRuleFactory.class";
path = path.replaceAll("/", ".")
.replaceAll("\\$(\\d+)\\.class", "\\.$1");发布于 2016-10-15 16:39:42
在我看来,在程序中执行shell命令不是很好,所以您可以做的是以编程的方式检查文件。
以这个例子为例,我们将在classNames中填充/path/to/jar/file.jar.中包含在jar文件中的所有Java类的列表
List<String> classNames = new ArrayList<String>();
ZipInputStream zip = new ZipInputStream(new FileInputStream("/path/to/jar/file.jar"));
for (ZipEntry entry = zip.getNextEntry(); entry != null; entry = zip.getNextEntry()) {
if (!entry.isDirectory() && entry.getName().endsWith(".class")) {
// This ZipEntry represents a class. Now, what class does it represent?
String className = entry.getName().replace('/', '.').replace('$',''); // including ".class"
classNames.add(className.substring(0, className.length() - ".class".length()));
}
}信贷:Here
https://stackoverflow.com/questions/40061549
复制相似问题