Получение пути каталога к файлу.class, содержащему main
Можно ли получить путь к моему файлу.class, содержащему мою функцию main, изнутри main?
4 ответа
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.
Для чего тебе это? Если вам это нужно, чтобы получить какие-либо файлы, находящиеся в той же директории, для этого предназначен Class.getResourceAsStream().
Согласно http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html, нет. Тем не менее, я предлагаю читать $0 (имя программы) на Java? Откройте для себя основной класс?, который, по крайней мере, дает вам основной класс.
Это больше похоже на проблему конечного пользователя для меня. Также учтите возможную необходимость запуска нескольких экземпляров любого данного приложения, и предотвращение этого пользователями станет серьезным раздражением.
Если проблема связана с временными конфликтами файлов, просто убедитесь, что все ваши временные файлы имеют уникальные имена. Насколько я понимаю, это самая распространенная причина, по которой люди чувствуют необходимость предотвратить запуск нескольких экземпляров своих приложений.
PS: методы java.io.File.createTempFile() идеально подходят для предотвращения временных конфликтов файлов, поскольку они автоматически генерируют уникальные имена файлов.