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
答案 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?