2012-05-08 4 views
6

У меня есть эта странная вещь с потоками ввода и вывода, которые я просто не могу понять. Я использую InputStream для чтения файла свойств из ресурсов, как это:JAVA: FileInputStream и FileOutputStream

Properties prop = new Properties(); 
InputStream in = getClass().getResourceAsStream("/resources/SQL.properties"); 
rop.load(in); 
return prop; 

Он находит свой файл и Красненький его успешно. Я стараюсь писать настройки как модифицированные следующим образом:

prop.store(new FileOutputStream("/resources/SQL.properties"), null); 

И я получаю странные ошибки от хранения:

java.io.FileNotFoundException: \resources\SQL.properties (The system cannot find the path specified) 

Так почему путь к свойствам меняются? Как это исправить? Я использую Netbeans на Windows,

+1

Добро пожаловать на SO. +1 для хорошо сформулированного вопроса со всей необходимой информацией. –

ответ

3

Может быть, это работает

try 
{ 
java.net.URL url = this.getClass().getResource("/resources/SQL.properties"); 

java.io.FileInputStream pin = new java.io.FileInputStream(url.getFile()); 

java.util.Properties props = new java.util.Properties(); 

props.load(pin); 
} 
catch(Exception ex) 
{ 
ex.printStackTrace(); 
} 

и проверьте ниже URL

getResourceAsStream() vs FileInputStream

+0

Попытка этого метода, скоро напишет, если он сработает – gedO

+0

Это сработало для меня :) – gedO

6

Проблема заключается в том, что getResourceAsStream() является урегулированием пути вы даете его по отношению к классам, в то время как new FileOutputStream() создает файл непосредственно в файловой системе. У них есть разные стартовые точки для пути.

В общем случае вы не можете записать обратно в исходное местоположение, из которого был загружен ресурс, поскольку он вообще не может существовать в файловой системе. Например, он может быть в файле jar, и JVM не будет обновлять файл jar.

+1

Можете ли вы напомнить мне пример, как написать его по-разному? – gedO

+0

Вы не можете написать это правильно. Вы не можете вообще писать в том месте, откуда был загружен ресурс. Он не может существовать в доступном для записи месте. –

+0

+1, поскольку это прекрасно объясняет, почему у меня есть эта проблема. – nathj07

1

Пожалуйста, смотрите на этот вопрос: How can I save a file to the class path

И этот ответ https://stackoverflow.com/a/4714719/239168

В резюме : вы не всегда можете тривиально сохранить файл, который вы прочитали из пути к классам (например, файл в баночке)

Однако если бы это было действительно просто файл на пути к классам, выше ответ имеет хороший подход

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

  • Нет связанных вопросов^_^