Java получить путь к каталогу Java-файла, где находится основной - PullRequest
0 голосов
/ 16 декабря 2018

Мне нужно получить путь к каталогу.Каталог содержит файл 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());

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

Что мне действительно нужно, так это:

/ home / aaa / dev / robot / robot / src / main / java / com /ааа / робот

, в котором найдено name.java .

Я в Linux Mint.

Ответы [ 2 ]

0 голосов
/ 16 декабря 2018

Поскольку последний код не работал должным образом, я обновил его.

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());

С этого момента просто не читайте дальше.

Вы можете вызвать командную строкуинструмент найти в своем коде и разрешить его только там, так как мы предполагаем, что вы на самом деле знаете, как называется Main.

Так что позвоните в свой терминал, чтобы понять, что он делает:

find / 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";
}

Если имя файла существует только один раз, то это приведет к наличию строки в одну строку.Это станет более трудным, если вы захотите найти какой-нибудь путь к Mainclass с таким общим именем, как Main.

Если вы получите более одной строки, вы можете рассмотреть возможность регулярного выражения над ней с любой информацией, которую вы можете извлечь из кода.

0 голосов
/ 16 декабря 2018

Это вам поможет:

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);
    }

}
...