0

TestA 项目中的 Java 类 ReadFile1。以及项目TestB中的另一个类TestRead。我想在 TestRead 类中阅读该类 ReadFile1 。我有唯一的相对路径,那我怎么读。

例子

我的课程存在于 D:\EIX-New-Source\source\message-kernel\src\main\java\com\eix\transform\parser\MessageTransformer.java

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

我正在 D:\EIX-New-Source\source\msg-Test\src\com\coreJava\rnd\RelativePath.java 中进行测试

当我运行这个程序时,我得到的结果是 D:\EIX-New-Source\source\message-kernel\target\classes

但我期望结果应该是 D:\EIX-New-Source\source\message-kernel\src\main\java\com\eix\transform\parser\MessageTransformer.java

4

3 回答 3

1

尝试以下方法获取类文件的绝对路径,然后您可以从相对文件路径附加剩余路径以获取文件的实际绝对路径。

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();
}
于 2013-04-18T07:37:04.570 回答
0

首先,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);
    }

}

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

于 2013-04-18T07:39:54.767 回答
0

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

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

如果要将其用作 java api,则需要定义项目 TestB 对 TestA 的依赖关系。

于 2013-04-18T07:31:55.383 回答