2015-11-30 5 views
-4

Я не пытаюсь получить рабочий каталог или путь к файлу .class, вместо этого я хочу, чтобы путь к исходному коду выполнялся.Как получить полный физический путь .java-файла?

что-то вроде "C: \ Workspace \ ProjectName ... \ SRC \ тест \ Java ... \ MyFile.java"

Любые идеи?

Редактировать: Есть ответы на SO, которые рассказывают, как получить абсолютный путь к сгенерированному файлу .class. Цель этого вопроса - узнать, есть ли способы получить местоположение исходного исходного файла (.java-файла) динамически , Спасибо.

+4

Во время выполнения файла '.java' нет. Ваш вопрос не имеет смысла. Просьба уточнить вашу цель. –

+0

Вы не запускаете «.java». Вы запускаете скомпилированные файлы .class. –

+0

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

ответ

0

В файле «.class» имеется необязательный атрибут, который дает имя файла (не путь) для исходного файла Java. JVM spec 4.7.10.

Спецификация говорит:

«Строка, на которую ссылаются пункт sourcefile_index будет интерпретирована как указание на имя исходного файла, из которого был составлен этот класс напильник не будет истолкована как указание на имя. каталога, содержащего файл или абсолютного имени пути для файла, такая дополнительная информация для конкретной платформы должна предоставляться интерпретатором времени выполнения или инструментом разработки в момент фактического использования имени файла. "

Этот атрибут не разоблачена java.lang.Class, но если вы можете (как-то) организует исключение быть обработан в то время как метод класса находится в стеке, то имя исходного файла может быть получаемый путем вызова StackTraceElement.getFileName() ... по модулю отказа от ответственности в javadoc.

В качестве альтернативы, если вы можете найти файл класса, он должен быть способен его декодировать и извлечь исходное имя файла. (Вы должны быть в состоянии найти существующую библиотеку 3-участник сделать декодирования/экстракции.)

ОДНАКО:

  • Как уже говорилось выше, что вы получаете простое имя файла, а не путь к файлу ,
  • Имя не обязательно является подлинным именем файла. Это может быть имя что-то в репозитории/базе данных, которая содержит источник. (В соответствии с отказом от ответственности javadoc.)
  • Атрибут необязательный, что означает, что он может вообще отсутствовать.

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

Смежные вопросы