|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: May 2007
Città: ROMA
Messaggi: 58
|
JSP - Leggere da un .txt
Salve a tutti, sto tentando di scrivere un'applicazione in jsp che , dato un certo file txt formattato in una certa maniera (tipo event log) mi faccia un analisi del tipo
if (riga1 = pippo) {...} if (riga2 = pluto) {...} sto provando con i FileReader f = new FileReader(code.txt); BufferedReader in = new BufferedReader(f); ma ho una certa difficoltà.. E' necessario fare l'analisi utilizzando un array? Grazie |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Con BufferedReader puoi leggere una riga per volta con il metodo readLine(). Poi bisogna vedere come è fatta la riga e cosa ci devi fare. Magari spiega meglio il formato e cosa devi analizzare.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#3 |
Member
Iscritto dal: May 2007
Città: ROMA
Messaggi: 58
|
in realtà devo leggere una sorta di file di log con segnalazioni di errore.
dato quel file, l'operatore deve poter capire, in base ad alcune parole chiave come mac address, iddevice etc, che macchina ha dato l'errore e dove si trova. Ovviamente queste info l'applicazione le trova su un db, ma questo non rappresenta un problema. La parte in cui mi trovo in difficoltà è la lettura del file riga per riga. Dovrei avere una cosa del genere: DEVICE: pippo MAC-Address: xx-xx-xx-xx-xx-xx Errore: prova le scritte prima dei ":" sono fisse, mentre ciò che varia sono le scritte successive. riesco ad isolare "pippo", "xx-xx-xx-xx-xx-xx" e "prova" ed inserirli in una variabile String? Grazie mille |
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Esempio di codice: Codice:
String line; String device="", mac="", errore=""; while ((line = br.readLine ()) != null) { if (line.startsWith ("DEVICE: ")) device = line.substring (8); else if (line.startsWith ("MAC-Address: ")) mac = line.substring (13); else if (line.startsWith ("Errore: ")) errore = line.substring (8); }
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 |
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Bhe, io incapsulerei tutto dentro una classe
Codice:
public class FileDiLog{ private File theFile; public FileDiLog(String path){ this.theFile=new File(path); } public String getProperty(String prop){ FileInputStream fis=new FileInputStream(this.theFile); BufferedReader br=new BufferedReader(fis); String input=br.readLine(); while (!input.contains(prop)) input=br.readLine(); StringTokenizer st=new StringTokenizer(input,":"); if (!st.nextToken().equals(prop)) throw new RuntimeException("something goes very wrong"); String ris=st.nextToken(); br.close(); fis.close(); return ris; } } Codice:
FileDiLog log=new FileDiLog("myFile.txt"); String device=log.getProperty("DEVICE"); String mac=log.getProperty("MAC-Address"); String errore=log.getProperty("Errore"); //e così via L'uso dello StringTokenizer è un po naife, ma è codice che ho scritto così all'impronta, meglio utilizzare le espressioni regolari e il metodo split() sulla stringa "input". Ciao. Ultima modifica di morskott : 20-06-2007 alle 12:34. |
![]() |
![]() |
![]() |
#6 |
Member
Iscritto dal: May 2007
Città: ROMA
Messaggi: 58
|
Ho provato ma non riesco a far trovare il file. L'ho messo nella stessa dir del file .jsp, nella cartella webapps di Tomcat.
Sarà sicuramente una banalità ma mi sfugge qualcosa... |
![]() |
![]() |
![]() |
#7 | |
Member
Iscritto dal: Jul 2005
Messaggi: 291
|
Quote:
![]() Comunque se avvedi molto frequentemente a tutte le propietà del file (oppure è raro che ne accedi ad una sola soltanto) per risparmiare tempo (l'overhead dato dalla comunicazione con l'hd diviene eccessivo) aggiungi questo metodo alla classe di prima Codice:
public Map<String,String> getAllProperties(){ Map<String,String> ris=new HashMap<String,String>(); FileInputStream fis=new FileInputStream(this.theFile); BufferedReader br=new BufferedReader(fis); String input=br.readLine(); while (input!=null){ StringTokenizer st=new StringTokenizer(input,":"); ris.put(st.nextToken(),st.nextToken()); input=br.readLine(); } br.close(); fis.close(); return ris; } E prendi le singole propietà con Codice:
FileDiLog log=new FileDiLog("myFile.txt"); Map<String,String> props=log.getAllProperties(); String device=props.get("DEVICE"); String mac=props.get("MAC-Address"); String errore=props.get("Errore"); //e così via Ultima modifica di morskott : 20-06-2007 alle 14:02. |
|
![]() |
![]() |
![]() |
#8 |
Member
Iscritto dal: May 2007
Città: ROMA
Messaggi: 58
|
Grazie a tutti per i commenti, sono stati preziosi, ora funziona come volevo..
![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 04:01.