Java 如何在不知道完整文件路径的情况下访问文件?

Java 如何在不知道完整文件路径的情况下访问文件?,java,Java,我有一个程序,用java将文件从服务器发送到客户端。该程序由两个主文件夹“服务器”和“客户端”组成。这些文件夹存储在主“项目1”文件夹中。“Server”文件夹包含Server.class文件和“ServerFiles”文件夹,后者包含.txt文件。 “Client”文件夹包含一个Client.class文件和一个不包含任何内容的“ClinetFiles”文件夹(服务器将.txt文件发送到该文件夹)。 目前,我提供了两个文件夹的完整路径 我的问题是我的路径应该是什么,这样程序就可以在任何目录中工

我有一个程序,用java将文件从服务器发送到客户端。该程序由两个主文件夹“服务器”和“客户端”组成。这些文件夹存储在主“项目1”文件夹中。“Server”文件夹包含Server.class文件和“ServerFiles”文件夹,后者包含.txt文件。 “Client”文件夹包含一个Client.class文件和一个不包含任何内容的“ClinetFiles”文件夹(服务器将.txt文件发送到该文件夹)。 目前,我提供了两个文件夹的完整路径

我的问题是我的路径应该是什么,这样程序就可以在任何目录中工作

我为客户尝试了./Project1/Client 及 服务器的/Project1/Server/file.txt


但是这些是无法识别的

您应该只使用相对路径。不确定应该返回多少文件夹,但想法是
File File=new File(“..\\\\\\\Client\\ClientFiles\\File.txt”)


注意:取自

相对路径相对于程序的当前工作目录,默认情况下,该目录是执行启动java命令的目录。还可以使用传递给java的
-Duser.dir
参数定义工作目录


作为依赖工作目录的替代方法,您可以设置包含顶级数据目录路径的系统属性或环境变量。然后在运行时读取此变量,并在访问数据目录中的文件时将其前置到子路径。

一种可能的解决方案是使用类对象的getResource方法获取路径的参考点。比如:

import java.io.File;
import java.net.URL;

public class MyClass {

    public static void main(String[] args) throws Exception {
        File applicationRoot = getApplicationRootFile();
        System.out.println(applicationRoot.getCanonicalPath());
    }

    private static File getApplicationRootFile() {
        URL url = MyClass.class.getResource(".");
        String path = url.getPath();
        File file = new File(path + "../../");
        return file;
    }

}

相关:请注意:看起来OP使用的是基于其
/
路径的unix操作系统。对于unix,这是相同的,只是“\\”应该更改为“/”,您可以在开始时始终检查操作系统类型,然后使用适当的路径。如果您将
cd
设置为或将
user.dir
设置为
C:/Users/Documents/Projects/Project1/testing/filepost
,那么在代码中使用的相对路径将是
client/clientFiles/test.txt