Получить имя файла из FileOutputStream
44044 просмотра
5 ответа
Есть ли способ получить имя файла из FileOutputStream
или FileInputStream
?
Ответы (5)
32 плюса
Похоже, ответ нет:
http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileOutputStream.html
http://docs.oracle.com/javase/7/docs/api/index.html?java/io/FileOutputStream.html
Не существует общедоступных методов, которые возвращают File
или String
использовали при построении потока.
РЕДАКТИРОВАТЬ: То же самое верно для FileInputStream
.
15 плюса
Эта функция не предоставляется стандартным File-Input / Output-Stream, но ничто не мешает вам написать свой собственный подкласс, который хранит файл (или fileName) и обеспечивает для него метод получения.
Я бы предложил реализовать некоторый FileNameAware
интерфейс для этого), поскольку на потоки ввода / вывода обычно ссылаются классы InputStream
/ OutputStream
abstract, чтобы избежать связывания вашего приложения с конкретными реализациями.
12 плюса
Возможно, с размышлением : Tom G ответ правильный, т.е. нет API для получения пути. Однако, если вы, как и я, застряли с фреймворком, вы не можете изменить его и не можете получить имя файла каким-либо другим способом, вы можете использовать отражение, чтобы получить путь (в моем случае мне это понадобилось для целей отладки).
Field pathField = FileOutputStream.class.getDeclaredField("path");
pathField.setAccessible(true);
String path = (String) pathField.get(outputStream);
Очевидно, что реализация FileOutpuStream может измениться со временем, и этот код может сломаться. Кроме того, для ясности я опустил обработку исключений в приведенном выше фрагменте.
Не доступно в 1.6 и 1.7 Подтверждено доступно в 1.8.
Автор: Hans Deragon Размещён: 06.11.2015 05:352 плюса
Это невозможно, даже в принципе. Предположение вопроса состоит в том, что каждый поток ввода файла связан с одним файлом с одним именем. Последнее предположение неверно для систем POSIX. Для систем POSIX файл может иметь любое количество имен (жестких ссылок), включая ноль. Случай с нулевыми именами довольно распространен для временных файлов, чтобы гарантировать, что временный файл удаляется при выходе из программы.
Я написал много файлового кода ввода-вывода и никогда не нуждался в этой функциональности. То, что вы просите об этом, говорит о том, что у вас есть недостаток дизайна. То есть у вас проблема XY.
- В коде почти нет причин объявлять класс ссылки на объект потока потоком файлов . Код ввода-вывода может использовать InputStream или OutputStteam. На самом деле, это необходимо , как часть программирования интерфейса, и чтобы позволить дешевое модульное тестирование вашего кода ввода-вывода (путем использования простого потока байтового массива в качестве фиктивного объекта).
- Возможно, вы надеетесь использовать имя файла в некоторых сообщениях журнала? Если это так, это говорит о том, что вы пытаетесь регистрировать ошибки ввода-вывода файла слишком низко в вашей программной иерархии. Возможно, вы слишком рано «ловите» IOException, вместо того, чтобы позволить им распространяться на более высокие части вашей программы, которые знают, что IO - это файловый IO, и знают имя файла.
-1 плюса
Мой ответ приходит немного поздно. Я столкнулся с той же проблемой при написании кода.
Чтобы обойти это, я использовал FileOutputStream(File file)
вместо, FileOutputStream(String location)
потому что я могу тогда сделать file.getAbsolutePath()
. Смотрите пример кода ниже.
String location = "some.relative.path.txt";
File file = new File(location);
FileOutputStream f = new FileOutputStream(file);
String question = "<h3>"+header+"</h3>";
String finalSource = HTMLWrapper.HTML_START+question +htmlContent;
f.write(finalSource.getBytes());
f.flush();
f.close();
System.out.println("The report is now available at"+file.getAbsolutePath());
Автор: David Brossard
Размещён: 28.02.2014 08:06
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- java Почему я не могу объявить статические методы в интерфейсе?
- io Почему в Ruby нет реального StringBuffer или StringIO?
- io How to find out if a file exists in C# / .NET?
- io Легкий способ записи содержимого Java InputStream в OutputStream
- io Отправка того же, но модифицированного объекта через ObjectOutputStream
- io Получить OutputStream в строку
- io Как мне прочитать / преобразовать InputStream в строку в Java?
- fileoutputstream Получить имя файла из FileOutputStream
- fileoutputstream Android: более быстрый способ чтения / записи ZipInputStream?
- fileoutputstream Как перезаписать / повторно использовать существующий выходной путь для заданий Hadoop и снова
- fileoutputstream Как записать данные с FileOutputStream без потери старых данных?
- fileoutputstream Java FileOutputStream Создать файл, если не существует
- fileoutputstream FileOutputStream открывает новый файл и удаляет содержимое при каждом его создании.