如何在处理中使用相对路径而不是绝对路径?

How to use a relative path instead of an absolute path in processing?

我对处理(和一般编程)还很陌生。

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

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

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

但是,由于该程序将 运行 在不同的机器上运行,所以我想弄清楚如何在处理过程中使用相对路径来访问上面的路径。顺便说一下,为了我的项目,我不能使用处理的 loadImage()。

任何帮助将不胜感激

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

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

在你的情况下 return "C:/Users/Matthew"

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

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

这个constructor of File有两个参数:一个文件夹和一个亲属子文件夹and/or文件。

现在,如果当前登录的用户在 "/ColourFeature/data" 文件夹中有一个名为 "image1.jpg" 的文件 [=33],则此 f 文件将指向所有计算机中的正确文件=] 主文件夹。

如果文件在您的代码中,您可以使用 classLoader 的 getResource 方法。

例如

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

如果您需要访问 class 的父目录中的文件,您可以使用@palacsint here

描述的方法

The normalize() methods (there are four of them) in the FilenameUtils class could help you. It's in the Apache Commons IO library.

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

我相信,如果您简单地使用每个草图默认使用的 "data" 路径,我相信 Processing 会让这一切变得非常容易 - 只需在您的草图文件夹中创建一个名为 "data" 的子文件夹。

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

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

println(dataPath(""));

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

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

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

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

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

再次感谢