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

时间:2015-01-28 11:51:59

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

我对处理(以及一般的编程)相当新。

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

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

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

然而,由于这个程序将在不同的机器上运行,我试图弄清楚如何在处理中使用相对路径来访问上面的路径。顺便说一下,为了我的项目的目的,我不能使用处理的loadImage()。

非常感谢任何帮助

4 个答案:

答案 0 :(得分:2)

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

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

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

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

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

constructor of File有两个参数:文件夹和亲属文件夹和/或文件。

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

答案 1 :(得分:1)

如果文件在您的代码中,您可以使用classLoader的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);

答案 2 :(得分:1)

我相信如果你只是使用"数据"那么Processing会让这很容易。每个草图默认使用的路径 - 只是一个名为" data"的子文件夹。在草图文件夹中。

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

当然,由于您说您无法使用loadImage(),因此您始终可以使用提供的方法dataPath("")访问数据文件夹的路径。例如,当我做

println(dataPath(""));

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

答案 3 :(得分:0)

感谢您的帮助。事实证明我很简单。解决方案如下:

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

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

对不起,如果我没有使用正确的技术词汇,但我对编程很新。

再次感谢