Java获取main所在的Java文件的dir的路径

时间:2018-12-15 21:10:16

标签: java linuxmint

我需要获取目录的路径。该目录包含找到主要方法的Java文件。

所以我已经搜索了stackoverflow,但仍然没有找到答案。

我已经使用了以下方法,但没有成功:

  1. File file = new File("name.java"); String path = file.getCanonicalPath(); System.out.println(path);

    输出为:/home/aaa/dev/robot/name.java

  2. String cwd = System.getProperty("user.dir"); System.out.println("Current working directory : " + cwd);

    当前工作目录:/ home / aaa / dev / robot

  3. File resourcesDirectory = new File("src/test/resources"); System.out.println(resourcesDirectory.getAbsolutePath());

    / home / aaa / dev / robot / src / test / resources

我真正需要的是以下内容:

  

/ home / aaa / dev / robot / src / main / java / com / aaa / robot

其中找到了 name.java

我在Linux上。

2 个答案:

答案 0 :(得分:1)

这将帮助您:

import java.io.File;

public class Test {

    public static void main(String[] args) {
        String name = Test.class.getName().replace(".", File.separator);
        String path = System.getProperty("user.dir") + File.separator + "src" + File.separator + "main" + File.separator + "java" + File.separator + name.substring(0, name.lastIndexOf(File.separator));
        System.out.println(path);
    }

}

答案 1 :(得分:1)

由于后一个代码无法按预期运行,因此我对其进行了更新。

String canSubString = canonicalPath.substring(0,canonicalPath.lastIndexOf("/")); //+/- 1 character, just check the output.
String classname = canonicalPath.substring( canonicalPath.lastIndexOf("/") + 1);
String command = "find " + canSubString + " -name " + classname;
Process p = Runtime.getRuntime().exec(command);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));  
System.out.println(in.readLine());

从这里开始,请不要继续阅读。

您可以在代码中调用命令行工具find,然后只在那里查找,因为我们假设您实际上知道Main的名称。

因此请在您的终端中致电以了解其作用:

  

找到/ home / aaa / dev / -name“ name.java”

现在,我们需要将其与Java结合起来。

Process p = Runtime.getRuntime().exec("find /home/aaa/dev/ -name 'name.java'");

尽管如此,您仍然需要获取输出。不习惯从Java调用命令行工具,我只是将输出写入文件

Process p = Runtime.getRuntime().exec("find /home/aaa/dev/ -name 'name.java' > /tmp/pathtomain" );

这时,您将在/ tmp / pathtomain中找到所需的路径。默认情况下,/ tmp文件夹在系统关闭时为空,因此,如果没有敏感信息,则无需删除该文件。

最后,您需要从该文件中读出。

Scanner scanner = new Scanner(new FileInputStream(new File("/tmp/pathtomain")));
String path = "";
while(scanner.hasNext()) {
     path += scanner.nextLine() + "\n";
}

如果文件名仅存在一次,则将导致单行字符串。如果您想找到一些通用名称(例如Main)的Mainclass路径,它将变得更加困难。

如果获得的行数更多,则可以考虑使用可以从代码中提取的任何信息对其进行正则表达式。