PDA

View Full Version : [Java] leggere dati da un file


loveforSCSI
03-09-2002, 13:47
ciao! :)
ho un file di testo (stream.txt) e devo prelevare stringhe di caratteri ( riga per riga) da questo file , e memorizzare ciò che è stato letto variabili di tipo stringa....mi dite come posso fare?..
ciao e grazie!

lombardp
03-09-2002, 14:13
Io ho usato questa funzione per copiare le righe di un file di testo in un array di stringhe. L'ho usata per una pagina JSP, comunque dovresti poterci estrarre qualcosa di utile... spero. :p


public void readfile(String f,String[] pstr,int[] pnum) {
String buf;
int i = 0;
try
{
BufferedReader file = new BufferedReader(new FileReader(f));
do
{
if ((buf = file.readLine())!=null)
{
pstr[i] = new String(buf);
i++;
}
} while (buf != null);
pnum[0] = i;
file.close();
}
catch(IOException e)
{
System.out.println("Could not read from file " + "'" + f + "'");
}
}

loveforSCSI
03-09-2002, 14:29
f è il nome del file...ma come lo hai dichiarato?
grazie, comunque

loveforSCSI
03-09-2002, 14:34
dimenticavo...il file da cui devo leggere è un file di testo..

loveforSCSI
03-09-2002, 18:16
ce l'ho fatta!!!
anche grazie al tuo esempio!!!
grazie, ciao!!!!!!!!!
:) :)

atrx00
14-11-2007, 17:18
siccome interessa pure a me leggere e immagazzinare stringhe in variabili
non puoi scrivere come hai fatto tu il codice??

grazie

Mixmar
14-11-2007, 19:32
Ecco la mia proposta:


public String[] readFromFile(String nomeFile) throws IOException {
String[] result = null;

if (nomeFile != null) {
File f = new File(nomeFile);
BufferedReader reader = null;
if (f.exists()) {
try {
reader = new BufferedReader(new FileInputStream(f));
ArrayList<String> tmpList = new ArrayList()<String>;
String tmp = null;
while((tmp = reader.readLine()) != null) {
tmpList.add(tmp);
}
result = new String[tmpList.size()];
tmpList.toArray(result);
} finally {
if(reader != null)
reader.close();
}
}
}
return result;
}

atrx00
14-11-2007, 23:31
we....
grazie della risposta....

siccome sono un noob....dovrò analizzare per benino quel codice che mi hai scritto...
certo che se il codice fosse commentato.....hehe...
cmq..grazie..
....ho iniziato ad interessarmi alla programmazione perchè ho un desiderio di creare un piccolo programma che tenga la classifica del mi videogame preferito....chissà se mai ci riuscirò....
ps. il gioco è Worms Armageddon....
ciao molte grazie ancora...
a presto,,,,

Mixmar
16-11-2007, 21:40
Ecco una versione del codice con un paio di commenti:


public String[] readFromFile(String nomeFile) throws IOException {
// Qui dichiaro in anticipo la variabile che ritornerò, e la pongo pari a null;
// finchè non ho completato tutto correttamente, il valore non viene modificato
// e quindi se succede qualcosa di male ritornerò null.
String[] result = null;

// Altrimenti non ha senso proseguire
if (nomeFile != null) {
File f = new File(nomeFile);
BufferedReader reader = null;
// Altrimenti non ha senso proseguire: a dire la verità, si poteva anche evitare:
// bastava lasciare andare il codice, se il file non esisteva avrebbe lanciato
// una "FileNotFoundException", era sufficiente aggiungerla nella clausola "throws"
// nella dichiarazione del metodo
if (f.exists()) {
try {
// I prossimi metodi posson fallire (impossibile accedere al file, eccetera):
// se così fosse, lancerebbero una eccezione, che verrebbe propagata al chiamante
// (clausola "throws" all'inizio)
reader = new BufferedReader(new FileInputStream(f));
// Già che ci siamo usiamo i generics: è una ArrayList,
// cioè una lista dinamica, con dimensione libera.
ArrayList<String> tmpList = new ArrayList()<String>;
String tmp = null;
// Adesso ciclo riga per riga finchè non ho finito
while((tmp = reader.readLine()) != null) {
tmpList.add(tmp);
}
// Questo codice converte la lista dinamica in un array a dimensione fissa:
// adesso settiamo result (viene fatto solo qui)
result = new String[tmpList.size()];
tmpList.toArray(result);
} finally {
// Qualsiasi cosa succeda dentro il blocco try, anche un eccezione,
// devo eseguire il codice che segue. Questo mi garantisce che comunque
// il file aperto verrà chiuso, evitando di lasciare file allocati in giro.
if(reader != null)
reader.close();
}
}
}
// Finalmente
return result;
}

lovaz
17-11-2007, 18:42
Scanner sc = new Scanner( file );
while( sc.hasNextLine() ) {
// qui leggi riga per riga tutto il file (\n escluso, se non sbaglio)
... = sc.nextLine();
}