【问题标题】:Java URI class file locationJava URI 类文件位置
【发布时间】:2012-05-10 15:11:09
【问题描述】:

为什么这段 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);
...

【问题讨论】:

    标签: java eclipse uri workspace home-directory


    【解决方案1】:

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

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

    【讨论】:

    • 但我的项目在“/home/medy75/Eclipse/dev_workspace/cz.cvut.visualization”中,而之前的路径(“../models/task.cm”)从“/家/医疗/”。所以我不明白...
    • @medy75:这是一个 RCP/插件应用程序吗?如果是这样,您的临时工作空间是在哪里创建的(rcp_workspace 左右)?
    • 是的,应该是 Eclipse 插件,关于临时工作区我完全不知道...
    • @medy:查看您的主目录...是否有包含“rcp”、“workspace”、“eclipse”等词的文件夹?您应该能够通过在 eclipse 中打开运行配置来识别此文件夹。
    • 啊,我想它在我的“/home/medy75/Eclipse/runtime-New_configuration”中。
    【解决方案2】:

    获取资源

    Resource getResource(URI uri, boolean loadOnDemand)

    Returns the resource resolved by the URI.
    

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

    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.
    

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

    【讨论】:

      【解决方案3】:

      其实是这样的。在基于 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.
      

      【讨论】:

      • 是的,我知道,但是这段代码不尊重它。 “home/medy75/models”不在“/home/medy75/Eclipse/dev_workspace/cz.cvut...”之上。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多