我对处理(以及一般的编程)相当新。
在我正在进行的项目中,我需要访问以下路径:
f = new File("C:/Users/Matthew/ColourFeature/data/image1.jpg");
这是一条绝对的道路,没有任何问题。
然而,由于这个程序将在不同的机器上运行,我试图弄清楚如何在处理中使用相对路径来访问上面的路径。顺便说一下,为了我的项目的目的,我不能使用处理的loadImage()。
非常感谢任何帮助
答案 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("")
。
对不起,如果我没有使用正确的技术词汇,但我对编程很新。
再次感谢