Можно ли получить File
, используемое FileInputStream
? FileInputStream
, по-видимому, не имеет каких-либо методов для его получения.
Получение файла, используемого FileInputStream
comment
вы можете использовать отражения, как показано в моем ответе, посмотрите
- person developer   schedule 20.11.2016
Ответы (1)
В API FileInputStream
нет прямых методов, но если вы действительно хотите, вы можете использовать API отражения Java, чтобы получить path
(фактическое имя файла с полным путем), как показано ниже:
FileInputStream fis = new FileInputStream(inputFile);
Field field = fis.getClass().getDeclaredField("path");
field.setAccessible(true);
String path = (String)field.get(fis);
System.out.println(path);
Переменная path
(содержит имя файла с путем) объявлена в классе FileInputStream
как закрытое конечное поле, которое мы получаем с помощью кода отражения, как показано выше.
P.S.: Обратите внимание, что описанный выше подход не может гарантировать достижение результата во всех реализациях JVM, поскольку он не определен в спецификации.
person
developer
schedule
20.11.2016
Это работает только для реализаций
FileInputStream
, в которых есть такой элемент. В договоре нет ничего, что требовало бы этого.
- person user207421; 20.11.2016
На самом деле я не могу найти такое поле в JDK 1.6, 1.7 или 1.8 ни для
FileInputStream
, ни для FileOutputStream
. Вы проверяли это?
- person user207421; 20.11.2016
да, я проверял это, работает отлично
- person developer; 20.11.2016
Кроме того, только что посмотрел файл класса, в котором показана эта переменная: private final String path;
- person developer; 20.11.2016
Какая версия? Не присутствует в тех, которые я упомянул. 1.7 и 1.8 — это OpenJDK, другой — src.zip, распространяемый вместе с JDK. Мне кажется, что вы смотрите на
java.io.File
. Нет причин, по которым FileInputStream
должен хранить переменную path
. Он не нужен за пределами конструктора.
- person user207421; 20.11.2016
1.8 версии JDK, использовал мой декомпилятор eclipse
- person developer; 20.11.2016