找到“我的”项目中的所有包

时间:2012-03-04 20:49:36

标签: java project packages

我已经知道如何获得所有可用的软件包,但是我只想获取我在自己的java项目中创建的软件包。

例如,我不希望java.util显示在包列表中。

我正在使用此代码来收集类:

List<String> result = new LinkedList<String>();

Package[] packages = Package.getPackages();

for(Package pack : packages)
{
    result.add(pack.getName());
}

它的效果非常好,现在我只想摆脱所有的系统包。

有没有办法过滤包,只留下我定义的包?

PS,我并不担心效率,这个目的可能会慢得多,它只会在程序开始时运行一次。

我已经看了几个相关的问题,但没有一个是我想要的。

如果有办法判断包名是否是系统包,那将完美地完成这项工作。

EDIT!

我将此作为API的一部分,因此我不能真正只是将包名称与设置令牌进行比较,看看它是否是我正在使用的包名称,我不希望它无论需要哪种编辑,只需将类文件放在我的项目中并使用它,无论我选择什么包名称。

我会尝试一种方法,无论它似乎不起作用,并给我随机错误,是扫描jar文件以检查是否存在与包名称等效的目录。每当我扫描jar文件时,我都会收到错误“无法访问jar文件,是否正由另一个进程使用?”。

扫描jar文件肯定会查看我的项目中是否存在类(jar文件),但另一个限制是我必须编译才能测试它,不能只在Eclipse中测试它,我编辑了代码10尝试让jar文件搜索工作,并且每次因为javaw.exe使用jar文件而导致访问错误时,它不允许我读取其中的文件。

EDIT2!

有人建议我列出所有已知系统类并将其与该列表进行比较,如果不同的JDK没有一些不同的类,这将有效,所以我想知道一个新的问题,有没有获取当前JRE系统库中所有jar文件的方法?然后我可以阅读这些内容并将所有包添加到过滤器中。

2 个答案:

答案 0 :(得分:2)

If there is a way to tell if a package name is a system package, 
that will do the job perfectly.

不,没有100%可靠的方法来判断哪些是系统包。包java。和javax。是保留的,应该只用作“系统”包,但没有什么可以阻止你破坏该规则。不同的JDK也有自己的实现包,例如com.sun for sun / oracle JDK。然后,下一个问题将是您可能使用的其他库中定义的包。

  

有没有办法过滤包装,只有我自己的包装   定义了吗?

通过其他方式更容易,只需在您自己的包中进行过滤(很可能您使用的是正常的包命名策略,并且不会重叠)。

答案 1 :(得分:1)

我不知道这方面的任何方法......只是为了课程。 但是你可以通过运行来创建一个自己的列表,也许可以保存到自己程序中每个操作系统的文件中。

Package[] pa = Package.getPackages();
for (int i = 0; i < pa.length; i++) {
    Package p = pa[i];
    System.out.print("\"" + p.getName() + "\", ");
}

然后加载此列表并遍历您要过滤包的其他程序中的每个包...

String[] systemPackages = new String[]{<all names of the packages>};
Package[] pa = Package.getPackages();
int n = 0;

for (int i = 0; i < pa.length; i++) {
    Package p = pa[i];
    boolean isSystemPackage = false;
    String pname = p.getName();
    for (int j = 0; j < systemPackages.length; j++) {
        String spname = systemPackages[j];
        if (pname.equals(spname)) {
            isSystemPackage = true;
            systemPackages[j] = null;
            break;
        }
    }
    if (!isSystemPackage) {
        n++;
    } else {
        pa[i] = null;
    }
}

Package[] projectPackages = new Package[n];
for (int i = 0, j = 0; i < pa.length; i++) {
    Package p = pa[i];
    if (p != null) {
        projectPackages[j] = p;
        j++;
    }
}

所以你可以检查一下......确定有不同版本的java-libraries但我不认为你想用那个严重的hm?