如何在处理中使用相对路径而不是绝对路径?
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("")
。
如果我没有使用正确的技术用语,我很抱歉,但我对编程还很陌生。
再次感谢
我对处理(和一般编程)还很陌生。
在我正在做的项目中,我需要访问以下路径:
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("")
。
如果我没有使用正确的技术用语,我很抱歉,但我对编程还很陌生。
再次感谢