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

时间:2013-04-18 07:25:35

标签: java file

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

实施例

我的班级在场 d:\ EIX-NEW-源\源\消息内核\ SRC \主\的java \ COM \ EIX \变换\解析器\ MessageTransformer.java

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

我正在进行测试 d:\ EIX-NEW-源\源\ MSG试验\ SRC \ COM \ coreJava \ RND \ RelativePath.java

当我运行这个程序时,我得到了结果 d:\ EIX-NEW-源\源\消息内核\目标\类

但我期待结果应该是 d:\ EIX-NEW-源\源\消息内核\ SRC \主\的java \ COM \ EIX \变换\解析器\ MessageTransformer.java

3 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

阅读完文件后,您没有提及要执行的操作。您可以通过创建输入流来读取文件。输入流也适用于相对路径。

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

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

答案 2 :(得分: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);
    }

}

有关详细信息,请访问How to use relative path instead of absolute path?