PDA

View Full Version : [Java] Leggere un file di testo e savarne il contenuto in un array


carlodonz
15-02-2008, 18:32
Ciao a tutti avrei bisogno di una mano..
Devo leggere un file di testo e fino a li ci sono... poi devo spezzettarlo in tante stringhe ogni qualvolta incontro il ";" e anche quello riesco a farlo. L'unico problema è che non riesco a salvare queste stringhe in un array, perchè non so quanto sarà lungo, ma la dimensione varia e secondo di quante sottostringhe avrò nel file di testo... come posso fare? Grazie :D

wingman87
15-02-2008, 18:54
Devi per forza utilizzare un array classico o puoi usare strutture dati alternative? Nel primo caso puoi fare una funzione che ridimensioni un array, quello che farà questa funzione sarà creare un array più grande, copiarci i valori del vecchio array e poi sostituire il riferimento al primo array con il nuovo. Nel secondo caso invece puoi guardare sulla documentazione java le classi ArrayList o Vector

carlodonz
15-02-2008, 19:25
Devi per forza utilizzare un array classico o puoi usare strutture dati alternative? Nel primo caso puoi fare una funzione che ridimensioni un array, quello che farà questa funzione sarà creare un array più grande, copiarci i valori del vecchio array e poi sostituire il riferimento al primo array con il nuovo. Nel secondo caso invece puoi guardare sulla documentazione java le classi ArrayList o Vector

no posso usare anche la ArrayList, ci ho provato ma non sono riuscito a implementarla...

vladix
15-02-2008, 20:45
nn so se ho capito bene , ma se ti serve un array di stringhe questo dovrebbe andare bene

FileReader fileReader = new FileReader();
BufferedReader fileBufereReader = new BufferedReader(fileReader );
ArrayList<String> blah = new ArrayList<String>();

String s = fileBufereReader .readLine();

while(s!=null){
blah.add(s);
s = fileBufereReader .readLine();
}

String [] arrayDiStringhe = blah .toArray(new String[0]);

vladix
15-02-2008, 20:49
oops scus ho capito male , tu voui dividere x ';' , non una stringa ogni riga :muro:

cmq una volta letto il file puoi fare

StringTokenizer tokens = new StringTokenizer(sorcio , ";");

int tokenCount = tokens.countTokens();
String [] arrayDiStringhe = new String [tokenCount];

for(int i = 0; i < tokenCount; i++){
arrayDiStringhe [i] = tokens.nextToken();
}



oppure se vuoi valorizzare l'array mano mano che leggi il file

ArrayList<String> blah = new ArrayList<String>();
blah.add(stringa);

poi quando hai finito ti prendi l'array di stringhe

String [] arrayDiStringhe = blah .toArray(new String[0]);

Mixmar
15-02-2008, 22:43
Potresti usare la classe Scanner (http://java.sun.com/j2se/1.5.0/docs/api/java/util/Scanner.html) del package java.util (non l'ho mai usata, me l'hanno appena nominata, ma sembra fare al caso tuo).

Oppure, modificando leggermente la soluzione di vladix, supponendo di avere tutto il contenuto del file nella stringa "contenuto":


String[] arrayDiStringhe = contenuto.split(";");


Semplice, no? :D

carlodonz
16-02-2008, 02:01
oops scus ho capito male , tu voui dividere x ';' , non una stringa ogni riga :muro:

cmq una volta letto il file puoi fare

StringTokenizer tokens = new StringTokenizer(sorcio , ";");

int tokenCount = tokens.countTokens();
String [] arrayDiStringhe = new String [tokenCount];

for(int i = 0; i < tokenCount; i++){
arrayDiStringhe [i] = tokens.nextToken();
}



oppure se vuoi valorizzare l'array mano mano che leggi il file

ArrayList<String> blah = new ArrayList<String>();
blah.add(stringa);

poi quando hai finito ti prendi l'array di stringhe

String [] arrayDiStringhe = blah .toArray(new String[0]);


praticamente io ho un file appunti.txt composto in questo modo:

<entry>id=1;cognome=rossi;<entry>cognome=verdi;id=2;nome=carlo;<entry>id=1;AA=2004;<entry>id=3;
tipologia=amministrativo;nome=mario;cognome=bianchi;<entry>id=2;dip=informatica;<entry>id=1;
nome=mario;<entry>id=4;cognome=rossi;nome=paolo;<entry>id=5;cognome=elia;<entry>cognome=scassi;
id=7;nome=simone;<entry>id=5;AA=2008;<entry>settore=web;id=2;


Quello che vorrei fare è leggere il file utilizzando la classe Scanner e fin qui ci sono. Poi una volta letto il file vorrei memorizzare in un array ogni sottostringa che inizia con il separatore <entry>. Siccome a seconda della lunghezza del file posso avere moltissime entry, non so la lunghezza massima del mio array e quindi credo di dover usare Arraylist, ma non so come utilizzarla per memorizzare le sottostringhe a mano a mano che vengono lette dal file. Spero di essermi spiegato! ;)

vladix
16-02-2008, 12:16
Oppure, modificando leggermente la soluzione di vladix, supponendo di avere tutto il contenuto del file nella stringa "contenuto":


String[] arrayDiStringhe = contenuto.split(";");


Semplice, no? :D
:D eh gia ,

cmq tu hai deto che sai come leggere il file con scanner , e come "split"-arlo , quindi ti crei una array list

ArrayList<String> mioArraryDiStringhe = new ArrayList<String>();


poi ogni volta che hai una sottoStringa fai (man mano che leggi il file )

mioRaaryDiStringhe .add(sottoStringa);


e alla fine ( del file ) ti prendi l'array di stringhe dalla array list


String [] arrayDiStringhe = mioArraryDiStringhe.toArray(new String[0]);


e fai quello che ti pare