Προς το περιεχόμενο

[Java] Q: Diavasma text arxeiou, anapoda.


UNPAIKTABLE

Προτεινόμενες αναρτήσεις

Δημοσ.

Kalispera all,

 

xreiazomai na diavasw me java ena log arxeio, apo network hardware.. alla epeidh einai terastio to arxeio (ths taksews twn 5mb) kai me endiaferoun mono oi teleftaies grammes (me ta pio prosfata events), einai asymforo na to diavasw apo thn arxh mexri na ftasw sto telos.

 

Kserei kaneis an yparxei kanenas sigouros tropos na diavasw mia-mia tis grammes, anapoda, ksekinontas apo to telos? Eida to implementation ths readline() kai prospathisa na ftiaksw mia dikh mou readPreviousLine(), ektelontas ton algorithmo ths readline() anapoda. H methodos afth, deixnei na doulevei, alla dystyxws mono otan ths dinw ena mikrotero arxeio na diavasei, se sxesh me to .log twn 5mb. Sta 5mb trwei frikes.. :)

 

Epishs, koitaksa kapoia pragmata panw se SeekableFileStream (an thymamai kala, variemai na anoigw to API gia to onoma :P) kai thymamai pws yparxoun oi functions mark() kai reset(). Alla afto de me voithaei na ksekinhsw apo thn teleftaia grammh tou arxeiou kai na anevainw mia-mia pros ta panw, anapoda dhladh..

 

H readPreviousLine() ousiastika pairnei ton arithmo twn bytes tou arxeiou, kanei seek() to teleftaio byte, kai apo ekei xrhsimopoiei dikous mou pointers gia na entopizei ta diadoxika "new line" \n kai "carriage return" \r, mexri na ftasei sthn prwth grammh tou file.. Alla den mporw na katalavw poio einai to provlhma megethous pou yparxei me to na diavasei to .log arxeio twn 5mb..

 

Opoiadhpote apopsh panw sto thema, tha thn diavaza me arketo endiaferon. Efxaristw :)

Δημοσ.

Me random access files doulevw, proxwraw osa bytes einai to megethos tou arxeiou, ftanw sto telos, kai thelw na diavazw mia-mia tis grammes pros ta pisw.

 

Px. skepsou oti to .log arxeio krataei alarms pou ginontai fired-up sto diktyo.. kai kathe grammh sto text file exei ena timestamp. Oso proxwras pros ta katw, to timestap megalwnei.. kai h teleftaia grammh antistoixei sto pio prosfato alarm. Thelw omws na diavasw to arxeio, kai na parw ta alarms gia tis teleftaies 2 wres as poume. Opote, skefthka na diavasw mia mia tis grammes apo to telos pros ta panw, koitazontas to timestamp ths kathe grammhs, kai ypologizontas 2 wres apo to teleftaio alarm. Otan h diafora ths teleftaias grammhs me thn grammh thn opoia diavazw (ypenthimizw, diavazw apo katw pros ta panw) einai megalyterh apo 2 wres, tote stamataw ekei kai eite diavazw oles tis grammes ksana ws to telos 'h tis exw hdh apothikefsei hdh se ena array, kathws tis diavaza kai synexizw apo ekei.

 

Endeiktika, oi grammes tou log file tha mporousan na einai kapws etsi: (tis exw aploustefsei arketa gia na mhn gemisei to parathyro)

 

>
[Date] [Time] [Alarm String] [RTT]

2004-06-07 00:11:47 Warning 285
2004-06-07 00:12:47 Info 16
2004-06-07 00:40:47 Warning 200
.
.
.
.

 

Cheers mate :) Opoios allos mporei na voithisei, eite me mia idea gia syzhthsh, einai more than welcome :) Thanks

Δημοσ.

Mallon vrhka poio einai to provlhma.. to .log arxeio ginetai generated se unix perivalon, kai h kathe grammh tou arxeiou teleiwnei mono me \n.

 

Enw to text arxeio pou ekana sta windows gia na testarw to programa. sto telos kathe grammhs exei \r\n...

 

Mysthria pragmata :P

Δημοσ.

Nai afto einai alh8eia oti yparxei diafora, mporeis omws na ftia3eis to java programmataki sou na doulevei se ola ta perivalonta psaxnontas gia to

>
System.getProperty("line.separator")

Afto epistrefei \n se *nix perivallonta (kai MacOS nomizw) kai \r\n se Windows.

 

Filika

Dionisos

Δημοσ.

Αυτό που θα έκανα εγώ είναι:

 

Runtime.getRuntime().exec("tail -n 10 mylogfile.log");

 

και θα διάβαζα το i/o stream του Process για να μπορέσω να διαβάσω τις τελευταίες 10 γραμμές. Αν δε θέλεις να έρθεις σε deadlock κατάσταση θα πρέπει να διαβάσεις το input και output stream σε διαφορετικά threads. Ο παραπάνω κώδικας θα παίξει μόνο σε *nix συστήματα.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...