【问题标题】:How to use a relative path instead of an absolute path in processing?如何在处理中使用相对路径而不是绝对路径?
【发布时间】:2015-03-27 07:32:17
【问题描述】:

我对处理(和一般编程)相当陌生。

在我正在做的项目中,我需要访问以下路径:

f = new File("C:/Users/Matthew/ColourFeature/data/image1.jpg");

这是一条绝对路径,没有任何问题。

但是,由于该程序将在不同的机器上运行,我试图弄清楚如何在处理中使用相对路径来访问上述路径。顺便说一句,就我的项目而言,我不能使用处理的 loadImage()。

任何帮助将不胜感激

【问题讨论】:

  • image1.jpg 是您的应用程序的一部分还是用户提供的数据?
  • @BetaRide yes image1.jpg 是应用程序的一部分。基本上,这将是一组图像中的一张图像

标签: java path processing relative-path absolute-path


【解决方案1】:

您可以通过以下方式获取用户的主文件夹:

String userHome = System.getProperty("user.home");

在你的情况下会返回"C:/Users/Matthew"

如果您同意在其中使用固定路径,您可以获得如下图像文件:

f = new File(userHome, "/ColourFeature/data/image1.jpg");

这个constructor of File 有两个参数:一个文件夹和一个相对子文件夹和/或文件。

如果当前登录的用户在他/她的主文件夹内的"/ColourFeature/data" 文件夹中有一个名为"image1.jpg" 的文件,那么现在这个f 文件将指向所有计算机中的正确文件。

【讨论】:

    【解决方案2】:

    如果文件在您的代码中,您可以使用类加载器的getResource 方法。

    例如

    File newFile = new File(YourClass.class
                       .getResource("relative/path/from/YourClass.java")
                       .toString());
    

    如果你需要访问类的父目录中的文件,你可以使用@palacsint here描述的方法

    FilenameUtils 类中的 normalize() 方法(其中有四个)可以帮助您。它在 Apache Commons IO 库中。

    final String name =  "/a/b/../";
    final String normalizedName = FilenameUtils.normalize(name, true); // "/a/"
    getClass().getResource(normalizedName);
    

    【讨论】:

      【解决方案3】:

      我相信,如果您只需使用每个草图默认使用的“数据”路径 - 只需在草图文件夹中创建一个名为“数据”的子文件夹,Processing 就会变得非常容易。

      将所有图像(或任何其他文件)放在数据文件夹中,在大多数情况下,您通常不需要指定绝对路径(例如使用loadImage())。

      当然,既然你说你不能使用loadImage(),你总是可以使用提供的方法dataPath("")访问数据文件夹的路径。例如,当我这样做时

      println(dataPath(""));
      

      从我的示例草图中,我得到以下输出:/Users/stephenbuchanan/Documents/Processing/testsketch/data

      【讨论】:

        【解决方案4】:

        感谢您的帮助。原来我很简单。解决方法如下:

        f = new File(dataPath(""), "/image1.jpg");
        

        但值得一提的是,使用dataPath("") 作为全局变量会给出不同的路径(我假设它是速写本路径),然后在设置方法中使用dataPath("")

        如果我没有使用正确的技术词汇,我很抱歉,但我对编程还很陌生。

        再次感谢

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-11-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-11-23
          相关资源
          最近更新 更多