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

时间:2019-04-03 20:45:02

标签: java

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

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

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

但这些未被识别

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

您应该只使用相对路径。不确定应该返回多少个文件夹,但是主意是File file = new File("..\\..\\..\\Client\\ClientFiles\\file.txt");

注意:摘自How to define a relative path in java (Windows)

答案 2 :(得分:0)

一种可能的解决方案是使用Class对象的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;
    }

}
相关问题