Можно ли получить путь к моему .class файлу, содержащему мою главную функцию, из основного?
Получение пути к файлу .class, содержащему основной
Ответ 1
URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());
Обратите внимание, что большинство файлов классов собраны в JAR файлы, поэтому это не будет работать в каждом случае (следовательно, IllegalStateException
). Однако вы можете найти JAR, который содержит класс с помощью этой техники, и вы можете получить содержимое файла класса, заменив вызов getResourceAsStream()
вместо getResource()
, и это будет работать, будет ли класс включен в файловой системы или в JAR.
Ответ 2
Согласно http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html, нет. Тем не менее, я предлагаю читать $0 (название программы) в Java? Откройте основной класс?, который по крайней мере дает вам основной класс.
Ответ 3
Для чего вам это нужно? Если вам это нужно, чтобы получить файлы, находящиеся в одном каталоге, то для Class.getResourceAsStream(). >
Ответ 4
Это больше похоже на проблему конечного пользователя. Также рассмотрите возможную необходимость запуска нескольких экземпляров любого конкретного приложения и предотвращения того, чтобы пользователи сделали это, станет серьезным раздражением.
Если проблема связана с временными конфликтами файлов, просто убедитесь, что все ваши временные файлы имеют уникальные имена. Это, как я понимаю, является наиболее распространенной причиной, по которой люди чувствуют необходимость предотвратить запуск нескольких экземпляров своих приложений.
P.S.: Методы java.io.File.createTempFile() идеально подходят для предотвращения конфликтов временных файлов, поскольку они автоматически генерируют уникальные имена файлов.