[ karatas @ 22.05.2009. 19:46 ] @
LP!

Ucitam datoteku u objekt klase File i onda zelim provjeriti da li se u datoteku moze pisati pozovem metodu canWrite() na tom objektu i nema veze sto drzim datoteku otvorenom metoda mi vraca "true"? radim na WinXP OS-u... zanima me koji su principi rada te metode, jer mi je malo nevjerojatno da mi na dateoteku koju drzim otovorenom vraca kao da se moze pisati u datoteku...

Hvala puno!
[ Dejan Lozanovic @ 23.05.2009. 02:33 ] @
Pa canwrite proverava samo da li datoteka generalno moze da se modifikuje , tj na windowsima ako imas read only datoteku vratice ti false, ili pod unixima gde imas rwx ako nemas pravo pisanja po datoteci vratice ti false. I to je ono sto metoda treba da vrati

Sa druge strane ako probas da pises po datoteci gde iz nekih objektivnih razloga upis nije moguc dobices IOException. Opet sa druge strane ja ne vidim problem da vise od jednog procesa/thread-a pokusava da pise u isti fajl , za takve stvari postoji i onaj append kod npr FileOutputStream-a.
[ karatas @ 23.05.2009. 16:19 ] @
Citat:
Dejan Lozanovic: Pa canwrite proverava samo da li datoteka generalno moze da se modifikuje , tj na windowsima ako imas read only datoteku vratice ti false, ili pod unixima gde imas rwx ako nemas pravo pisanja po datoteci vratice ti false. I to je ono sto metoda treba da vrati

Sa druge strane ako probas da pises po datoteci gde iz nekih objektivnih razloga upis nije moguc dobices IOException. Opet sa druge strane ja ne vidim problem da vise od jednog procesa/thread-a pokusava da pise u isti fajl , za takve stvari postoji i onaj append kod npr FileOutputStream-a.


koliko sam razumio logiku rada te canWrite metode, je da se sprijeci mogucnost pisanja u datoteku dok je netko drugi azurira. i onda me zbunilo to sto NIKAKO pod windowsima nisam mogao simulirati situaciju da mi metoda vrati false. ova solucija s read only dateotekom mi se cinila nelogicnom...

da li bi mi mogao objasniti ovu metodu append kod npr. FileOutputStream-a. sto ukoliko ja zelim nesto mijenjati na datoteci, sto je vec netko prij emene bas upravo u tom trenutku promijenio. jel java brine o takvim situacijama?

hvala puno!

[ Dejan Lozanovic @ 23.05.2009. 18:36 ] @
Citat:
karatas: koliko sam razumio logiku rada te canWrite metode, je da se sprijeci mogucnost pisanja u datoteku dok je netko drugi azurira. i onda me zbunilo to sto NIKAKO pod windowsima nisam mogao simulirati situaciju da mi metoda vrati false. ova solucija s read only dateotekom mi se cinila nelogicnom...

Heh, mogu samo da kazem da na javu kao jezik dosta uticaja ima unix, mozda si primetio pored canWrite() postoji i canRead() i canExecute(), to je nesto sto svaki unix ima u okviru svog fajl sistema, primera radi na unixu(linux,mac itd.) dovoljno je setovati execute flag na fajlu da bi mogao da ga izvrsis, za razliku od windowsa gde je neophodno da fajl ima extenziju exe. Ako te vise zanima o svemu ovome potrazi ovako
http://www.google.com/search?q=rwx+permissions

Citat:

da li bi mi mogao objasniti ovu metodu append kod npr. FileOutputStream-a. sto ukoliko ja zelim nesto mijenjati na datoteci, sto je vec netko prij emene bas upravo u tom trenutku promijenio. jel java brine o takvim situacijama?

hvala puno!


http://java.sun.com/javase/6/d...Stream(java.io.File,%20boolean)

To zapravo znaci da svaki upis u fajl ce se desiti uvek na kraju fajla ( Operativni sistem vodi racuna o tome) i na taj nacin ako imas dva ili vise programa koji upisuju u isto vreme u dati fajl nece se desiti situacija da ce jedan program upisati svoje podatke preko mesta gde je drugi program vec upisao. Primer za ovako nesto je recimo nekakav log file gde vise programa u isto vreme upisuje u isti log.