FileWriter и InputStream в Java - PullRequest
2 голосов
/ 13 июля 2010

Раньше, когда я использовал файл в своем fileWriter, он работал, но теперь, поскольку я использую getResourceAsStream вместо файла, как я могу заставить его работать?

FileWriter fstream = new FileWriter(new File("filename"), true);

Теперь, когда я прохожу

InputStream is = getResourceAsStream("filename");
FileWriter fstream = new FileWriter(is, true);

Мне пришлось изменить его, потому что когда я создаю работоспособную флягу с плагином сборки maven, в банке нет src / main / resources

EDIT:

спасибо Касабланке и другим за указание на мои ошибки, следите:

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

Ответы [ 3 ]

3 голосов
/ 13 июля 2010

InputStream представляет входной поток, поэтому он не подходит для вывода.Вы не можете написать на Inputstream.getResourceAsStream возвращает поток для чтения ресурса, а не для записи в него.

Боюсь, что нет простого способа записи в ресурс, загруженный через ClassLoader.Одним из решений было бы прочитать его как Properties, а затем использовать метод store, чтобы записать его в файл ресурсов, получив поток вывода другими способами.Вы можете получить URI файла ресурсов, используя загрузчик классов, но нет гарантии, что вы можете написать в него напрямую (например, если он упакован в jar со знаком).

3 голосов
/ 13 июля 2010

Прежде всего, чтобы записать в поток, вам нужен универсальный модуль записи потоков, а не модуль записи файлов. Во-вторых, запись означает вывод, поэтому вам нужен выходной пишущий. Итак, класс, который вы ищете, это OutputStreamWriter.

getResourceAsStream возвращает InputStream, который вы можете использовать только для чтения , что означает, что вы можете использовать только такой класс, как InputStreamReader.

Обновление:

У вас уже есть правильный код для добавления в файл, используя FileWriter. Однако getResourceAsStream возвращает ресурс, доступный только для чтения, поэтому не существует простого метода для записи данных обратно в него.

0 голосов
/ 13 июля 2010

Если вы прочитаете документ, здесь , вы увидите, что нет конструктора для вашего InputStream. Вот почему я не компилирую. Так как вы ничего не спрашивали, вот и все.

...