0

为什么这段 java 代码在我的主目录中查找文件?为什么它不在我的 Eclipse 工作区(/home/ user /eclipse/workspace/)中?

import org.eclipse.emf.common.util.URI;

URI uri = null;
try {
    uri = URI.createURI("../models/task.cm");
    Resource resource = resourceSet.getResource(uri, true);
...
4

3 回答 3

1

它不应该在工作区目录中查找文件。..它应该在当前工作目录的父目录中查找文件(因为路径以 开头 )。从 Eclipse 运行时的当前工作目录是项目的目录。

我猜你的项目在你的主目录下,所以这就是原因。

于 2012-05-10T15:16:37.933 回答
0

事实上,它是。在基于 Unix 的 shell 中,“..”代表当前工作目录之上的目录。因此,它实际上是在 Eclipse 程序周围的文件夹中查找,或者正在运行的任何东西。

家将由“//home”表示

当前工作目录由“.”的值表示。

用户目录用“~”表示

最后,根由“/”表示

例如:

Macintosh-2:/ Administration$ cd ~ #!sends me from root to my user directory
Macintosh-2:~ Administration$ cd ../Administration #!sends me from my user directory, to the directory above it, then back down 
Macintosh-2:~ Administration$ cd Administration #!user directory doesn't exist inside my user directory, thus showing ".." represents the directory above the current working one.
-bash: cd: Administration: No such file or directory
Macintosh-2:~ Administration$ cd .. #!moves up a directory
Macintosh-2:Users Administration$ #!now working in surrounding directory.
于 2012-05-10T15:19:18.973 回答
0

获取资源

资源 getResource(URI uri, boolean loadOnDemand)

Returns the resource resolved by the URI.

为了将给定的 URI 解析为资源,资源集应实现以下策略。首先它使用它的 URI 转换器对 URI 进行规范化,然后将其与每个资源的规范化 URI 进行比较;如果找到匹配项,则该资源将成为结果。如果做不到这一点,它会授权允许在其他地方解析 URI。例如,包注册表用于将包的名称空间 URI 解析为该包的静态实例。所以重要的一点是,任意实现可以将 URI 解析为任何资源,不一定是这个特定资源集包含的资源。如果委托步骤未能提供结果,并且 loadOnDemand 为真,则创建资源并且该资源成为结果。

Parameters:
    uri - the URI to resolve.
    loadOnDemand - whether to create and load the resource, if it doesn't 
    already exists. 
Returns:
    the resource resolved by the URI, or null if there isn't one and it's not 
    being demand loaded. 
Throws:
    java.lang.RuntimeException - if a resource can't be demand created. 
    WrappedException - if a problem occurs during demand load.

因此,找不到资源,并且在您的主目录中创建了任意资源。

于 2012-05-10T15:20:03.457 回答