Получение пути каталога к файлу .class, содержащему main - PullRequest
13 голосов
/ 22 апреля 2009

Можно ли получить путь к моему файлу .class, содержащему мою функцию main, изнутри main?

Ответы [ 4 ]

28 голосов
/ 22 апреля 2009
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.

0 голосов
/ 30 июля 2009

Для меня это больше похоже на проблему конечного пользователя. Также учтите возможную необходимость запуска нескольких экземпляров любого данного приложения, и предотвращение этого пользователями станет серьезным раздражением.

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

P.S .: Методы java.io.File.createTempFile () идеально подходят для предотвращения временных конфликтов файлов, поскольку они автоматически генерируют уникальные имена файлов.

0 голосов
/ 22 апреля 2009

Зачем вам это нужно? Если вам это нужно, чтобы получить какие-либо файлы, находящиеся в одном каталоге, вот для чего нужна Class.getResourceAsStream () .

0 голосов
/ 22 апреля 2009

Согласно http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html, нет. Тем не менее, я предлагаю прочитать $ 0 (имя программы) на Java? Откройте для себя основной класс? , который, по крайней мере, дает вам основной класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...