java类带包路径,Java:以编程方式确定加载在类路径上的所有包名称

如果你确实需要安装和扫描jar文件,那么这个内置的是这个.如果你必须去那条路线,那可能会使事情变得更容易一些.

编辑#1:您可以像这样(从示例here)得到类路径:

String strClassPath = System.getProperty("java.class.path");

System.out.println("Classpath is " + strClassPath);

从那里你可以看看本地文件系统类,jar等.

编辑#2:这是一个VFS的解决方案:

import java.util.HashSet;

import org.apache.commons.lang.StringUtils;

import org.apache.commons.vfs.FileObject;

import org.apache.commons.vfs.FileSystemManager;

import org.apache.commons.vfs.FileType;

import org.apache.commons.vfs.VFS;

public class PackageLister {

private static HashSet< String > packageNames = new HashSet< String >();

private static String localFilePath;

/**

* @param args

* @throws Throwable

*/

public static void main( final String[] args ) throws Throwable {

FileSystemManager fileSystemManager = VFS.getManager();

String[] pathElements = System.getProperty( "java.class.path" ).split( ";" );

for( String element : pathElements ) {

if ( element.endsWith( "jar" ) ) {

FileObject fileObject = fileSystemManager.resolveFile( "jar://" + element );

addPackages( fileObject );

}

else {

FileObject fileObject = fileSystemManager.resolveFile( element );

localFilePath = fileObject.getName().getPath();

addPackages( fileObject );

}

}

for( String name : packageNames ) {

System.out.println( name );

}

}

private static void addPackages( final FileObject fileObject ) throws Throwable {

FileObject[] children = fileObject.getChildren();

for( FileObject child : children ) {

if ( !child.getName().getBaseName().equals( "Meta-INF" ) ) {

if ( child.getType() == FileType.FOLDER ) {

addPackages( child );

}

else if ( child.getName().getExtension().equals( "class" ) ) {

String parentPath = child.getParent().getName().getPath();

parentPath = StringUtils.remove( parentPath,localFilePath );

parentPath = StringUtils.removeStart( parentPath,"/" );

parentPath = parentPath.replaceAll( "/","." );

packageNames.add( parentPath );

}

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值