PDA

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



Slavok
14.06.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
14.06.2005, 13:30
А ты файл проталкиваешь перед закрытием??
Потому как этот код выглядит нормальным.
А какая версия Ява машины ?

Slavok
14.06.2005, 13:40
Нет, при запуске программы. Java Version 1.4.2
Интересно то, что после завершения java.exe, файл захватывает процесс system и держит его до перезагрузки операционки (Win XP SP2 Eng)

Slavok
14.06.2005, 13:59
Кстати, только что обнаружил, что если завершать работу сервлета не закрывая cmd на кнопку [X], а нажатием Ctrl+C, то оно отпускает файл!!!
Как же мне корректно закрыть файл, что бы сразу после ноужной операции приложение перестало к нему обращаться?

Oscar
14.06.2005, 14:40
Slavok,

Вот часть кода

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

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

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

я так думаю.

Kolinus
14.06.2005, 15:22
Ява не скомпилит если не будет трай кэтча (ИМХО)
Как ты читаешь из стрима и пишешь туда ?
Я имею ввиду заворачиваешь ли ты файл стрим в какую либо обертку?

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

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

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

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

Если в properties.store() это не делается автоматически, то из того кода, что написал Slavok не видно этого.

Kolinus
14.06.2005, 18:01
именно flush()
именно потому что не видно я и уточнил
написано было что после выполнения кода - посему предполагается что он рабочий ;)

Oscar
14.06.2005, 18:49
написано было что после выполнения кода

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




А ты файл проталкиваешь перед закрытием?? (c)Kolinus


Нет, при запуске программы. (c)Slavok



Оффтопик:


Интересно то, что после завершения java.exe,
файл захватывает процесс system и держит его до перезагрузки операционки

Не, а чё? Прикольная система защиты файлов,
нужно только ещё придумать, от кого их так защищать :lol:

Oscar
14.06.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.

хм .. :?