首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在"my“项目中查找所有包

在"my“项目中查找所有包
EN

Stack Overflow用户
提问于 2012-03-05 04:49:36
回答 2查看 9.3K关注 0票数 2

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

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

我使用下面的代码来收集类:

代码语言:javascript
运行
复制
List<String> result = new LinkedList<String>();

Package[] packages = Package.getPackages();

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

它工作得很好,现在我只想摆脱所有的系统包。

有没有办法过滤这些包,只保留我定义的包?

另外,我并不担心效率,这样做的目的是尽可能的慢,它只会在我的程序开始时运行一次。

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

如果有一种方法可以判断包名是否是系统包,那么它将完美地完成这项工作。

编辑!

我将其作为API的一部分,因此,我不能简单地将包名与设置的令牌进行比较,以确定它是否是我正在使用的包名,我不希望需要进行任何编辑,只需将类文件放在我的项目中并使用它,而不管我选择什么包名。

我会尝试的一种方法是扫描jar文件,检查是否存在与包名相同的目录,但它似乎不起作用,并给我带来随机错误。每当我扫描jar文件时,我都会得到错误消息"Can‘t access jar file,is by by another process?“。

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

Edit2!

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-05 05:21:49

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

代码语言:javascript
运行
复制
Package[] pa = Package.getPackages();
for (int i = 0; i < pa.length; i++) {
    Package p = pa[i];
    System.out.print("\"" + p.getName() + "\", ");
}

然后加载这个列表并遍历其他程序中要过滤这些包的每个包……

代码语言:javascript
运行
复制
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库有不同的版本,但我认为您不会那么认真地使用它,嗯?

票数 1
EN

Stack Overflow用户

发布于 2012-03-05 05:01:47

如果有一种方法可以区分软件包名称是否是系统软件包,那么它将完美地完成这项工作。

不,没有百分之百确定的方法来区分哪些是系统包。包java。和javax。是保留的,应该只作为“系统”包使用,但没有什么能阻止你违反这条规则。另外,不同的JDK都有自己的实现包,例如用于sun/oracle JDK的com.sun。那么下一个问题将是在您可能使用的其他库中定义的包。

有没有办法过滤这些包,只保留我定义的包?

相反,这要容易得多,只需在中过滤您自己的包(很可能您使用的是普通的包命名策略,并且不会有重叠)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9558682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档