Доступ к файлу блокируется до следующей загрузки..!

Модератор: Absurd

Ответить
Slavok
Сообщения: 4
Зарегистрирован: 14 июн 2005, 12:55
Откуда: Воронеж

14 июн 2005, 13:08

Здравствуйте. Вот часть кода:

Код: Выделить всё

Properties properties1 = new Properties();
String s1 = "Admin";
FileInputStream f1 = new FileInputStream("C:\\data\\" + s1);
properties1.load(f1);
f1.close();
String s2 = new String((String) properties1.get("clist"));
String s3 = new String((String) properties1.get("fname"));
properties1.setProperty("lastlogin", (new Date()).toString());
FileOutputStream f2 = new FileOutputStream("C:\\data\\" + s2);
properties1.store(f2, "data file for user " + s2);
f2.close();
После его выполнения блокируется файл, с которым я работаю, и, даже после того, как вырубаешь приложение файл остаётся занят.

Сроки жмут, подскажите, что делать-то?
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

14 июн 2005, 13:30

А ты файл проталкиваешь перед закрытием??
Потому как этот код выглядит нормальным.
А какая версия Ява машины ?
В SAD - все в SAD.
Slavok
Сообщения: 4
Зарегистрирован: 14 июн 2005, 12:55
Откуда: Воронеж

14 июн 2005, 13:40

Нет, при запуске программы. Java Version 1.4.2
Интересно то, что после завершения java.exe, файл захватывает процесс system и держит его до перезагрузки операционки (Win XP SP2 Eng)
Slavok
Сообщения: 4
Зарегистрирован: 14 июн 2005, 12:55
Откуда: Воронеж

14 июн 2005, 13:59

Кстати, только что обнаружил, что если завершать работу сервлета не закрывая cmd на кнопку [X], а нажатием Ctrl+C, то оно отпускает файл!!!
Как же мне корректно закрыть файл, что бы сразу после ноужной операции приложение перестало к нему обращаться?
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

14 июн 2005, 14:40

Slavok,
Вот часть кода
Это действительно рабочий код из программы?
А как же IOException и Ко? Их ловить не надо?

Если весь этот код размещён в блоке
try {
} catch(Exception e){}

,то если выскочит эксепшн - f.close() уже не сработает.

я так думаю.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

14 июн 2005, 15:22

Ява не скомпилит если не будет трай кэтча (ИМХО)
Как ты читаешь из стрима и пишешь туда ?
Я имею ввиду заворачиваешь ли ты файл стрим в какую либо обертку?
В SAD - все в SAD.
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

14 июн 2005, 15:47

Kolinus,
да, Ява не скомпилит, потому мой вопрос был, где у него этот ТРАЙ стоит.

properties1.load(f1); // чтение из стрима
properties1.store(f2, "data file for user " + s2); // запись в стрим

Разве что-то не так?

А вообще, мне немного непривычна твоя терминология.
Что такое "проталкивать файл", например?
Это flush() имелся ввиду?

Если в properties.store() это не делается автоматически, то из того кода, что написал Slavok не видно этого.
Kolinus
Сообщения: 449
Зарегистрирован: 23 авг 2004, 14:02
Откуда: Минск

14 июн 2005, 18:01

именно flush()
именно потому что не видно я и уточнил
написано было что после выполнения кода - посему предполагается что он рабочий ;)
В SAD - все в SAD.
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

14 июн 2005, 18:49

написано было что после выполнения кода
Kolinus, прошу прощения, где было написано?


А ты файл проталкиваешь перед закрытием?? (c)Kolinus
Нет, при запуске программы. (c)Slavok


Оффтопик:
Интересно то, что после завершения java.exe,
файл захватывает процесс system и держит его до перезагрузки операционки
Не, а чё? Прикольная система защиты файлов,
нужно только ещё придумать, от кого их так защищать :lol:
Аватара пользователя
Oscar
Сообщения: 958
Зарегистрирован: 29 май 2004, 13:44
Откуда: Мюнхен (рожден в Киеве)
Контактная информация:

14 июн 2005, 18:56

java.util.Properties.storestore(OutputStream, String)
...
After the entries have been written, the output stream is flushed. The output stream remains open after this method returns.
хм .. :?
Ответить