如何从文件系统中的相对路径中找到绝对路径



TestA项目中的java类ReadFile1。项目TestB中的另一个类TestRead。我想在TestRead类中读取ReadFile1。我有唯一的相对路径,那么我如何读取它。

例子

我们班现在在D: EIX-New-Source message-kernel src 主要来源 java 解析器 com eix 变换MessageTransformer.java

message-kernel是源文件夹中的项目。

,我在做测试D: EIX-New-Source源 msg-Test src com coreJava rnd RelativePath.java

当我运行这个程序时,我得到的结果是D: EIX-New-Source 源 message-kernel 目标类

但我期待的结果应该是D: EIX-New-Source message-kernel src 主要来源 java 解析器 com eix 变换MessageTransformer.java

尝试下面的方法来获取类文件的绝对路径,然后您可以在相对文件路径中添加剩余的路径来获得文件的实际绝对路径。

String getAbsolutePath(){
java.security.ProtectionDomain pd =
YourClassName.class.getProtectionDomain();
if ( pd == null ) return null;
java.security.CodeSource cs = pd.getCodeSource();
if ( cs == null ) return null;
java.net.URL url = cs.getLocation();
if ( url == null ) return null;
java.io.File f = new File( url.getFile() );
if (f == null) return null;
return f.getAbsolutePath();
}

您没有提到在读完文件后要做什么。您可以通过创建输入流来读取文件。输入流也适用于相对路径。

FileInputStream inputStream = new FileInputStream(new File("../../com/eix/cromics/tdlr/ReadFile1"));

如果你想使用它作为java api,那么你需要定义项目TestB对TestA的依赖。

首先,Java保存相对于当前工作目录的任何文件。如果你给出一个包声明,那么它会在当前目录下相应地创建一个文件夹。
如果您总是希望文件保存相对于Java文件的位置,而不是当前工作目录,则需要找到该目录并假定它获得绝对路径。

工作目录是你运行程序的地方,也就是你调用java TestClass的地方,所以当你想写相对于正在执行的类的文件时,你必须知道当前目录并从那里附加相对路径,例如

public class TestClass {
  public void printFullPath() {
        String fullPath = String.format("%s/%s", System.getProperty("user.dir"),   this.getClass().getPackage().getName().replace(".", "/"));
        System.out.println(fullPath);
    }
}

有关详细信息,请访问如何使用相对路径而不是绝对路径?

相关内容

最新更新