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

Java 如何在处理过程中使用相对路径而不是绝对路径?,java,path,processing,relative-path,absolute-path,Java,Path,Processing,Relative Path,Absolute Path,我对处理(和编程)相当陌生 在我正在进行的项目中,我需要访问以下路径: f = new File("C:/Users/Matthew/ColourFeature/data/image1.jpg"); 这是一条绝对路径,没有任何问题 然而,由于这个程序将在不同的机器上运行,我试图找出如何在处理中使用相对路径来访问上面的路径。顺便说一下,在我的项目中,我不能使用processing的loadImage() 非常感谢您的帮助您可以通过以下方式获取用户的主文件夹: String userHome =

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

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

f = new File("C:/Users/Matthew/ColourFeature/data/image1.jpg");
这是一条绝对路径,没有任何问题

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


非常感谢您的帮助

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

String userHome = System.getProperty("user.home");
在您的情况下,它将返回
“C:/Users/Matthew”

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

f = new File(userHome, "/ColourFeature/data/image1.jpg");
这需要两个参数:父文件夹和相对子文件夹和/或文件


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

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

String userHome = System.getProperty("user.home");
在您的情况下,它将返回
“C:/Users/Matthew”

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

f = new File(userHome, "/ColourFeature/data/image1.jpg");
这需要两个参数:父文件夹和相对子文件夹和/或文件


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

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

乙二醇

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

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

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

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

乙二醇

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

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

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

我相信,如果您只需使用默认情况下用于每个草图的“数据”路径,即草图文件夹中名为“数据”的子文件夹,则处理过程会变得非常简单

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

当然,因为您说过不能使用
loadImage()
,所以您可以始终使用提供的方法
dataPath(“”
)访问数据文件夹的路径。例如,当我

println(dataPath(""));

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

我认为,如果您只需使用默认情况下用于每个草图的“数据”路径,即草图文件夹中名为“data”的子文件夹,那么处理将使这一过程变得非常简单

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

当然,因为您说过不能使用
loadImage()
,所以您可以始终使用提供的方法
dataPath(“”
)访问数据文件夹的路径。例如,当我

println(dataPath(""));

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

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

f = new File(dataPath(""), "/image1.jpg");
但是值得一提的是,使用
dataPath(“”
作为全局变量会给出一个不同的路径(我假设它是sketchbook路径),然后在setup方法中使用
dataPath(“”

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


再次感谢你的帮助。我原来很简单。解决方案如下:

f = new File(dataPath(""), "/image1.jpg");
但是值得一提的是,使用
dataPath(“”
作为全局变量会给出一个不同的路径(我假设它是sketchbook路径),然后在setup方法中使用
dataPath(“”

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


再次感谢

image1.jpg是应用程序的一部分还是用户提供的数据?交叉发布:@BetaRide yes image1.jpg是应用程序的一部分。基本上,这将是应用程序中imagesIs image1.jpg集合中的一个图像,或者是用户提供的数据?交叉发布:@BetaRide yes image1.jpg是应用程序的一部分。基本上,这将是一个图像集合中的一个图像