Newsgroup: it.comp.java
Titolo: Lettura da file

Salve,
è la prima volta che scrivo in questo newsgroup. Il problema che 
mi si è presentato è il seguente:
devo leggere un file di testo in cui ci sono 3 float sulla prima 
riga e devo quindi memorizzarli in un array. Seguo un libro a 
livello didattico, e finora sono riuscito a fare lo Stream di 
caratteri con il seguente codice:
 
import java.io.*;
public class LetturaTxt{
 
 public static void main(String args[]){
  FileReader r =null;
try{
     r= new FileReader(args[0]);
   }
catch(FileNotFoundException e){
  System.out.println("File non trovato");
  System.exit(1);
                              }
 
try{
    int n=0, x=r.read();
    while(x>=0){
       char ch=(char) x;
       System.out.println(""+ch);
       n++;
       x=r.read();
               }
 System.out.println("\nTotale caratteri: "+n);
}
catch(IOException ex){
 System.out.println("errore di input");
 System.exit(2);
}
                                       }
                        } 
In questo modo però leggo un carattere alla volta e diciamo che 
non riesco a dare "significato" ai float che mi serve 
memorizzare.
1)Sarebbe meglio fare lo Stream di Byte o non c'è differenza?
2)Come faccio a risolvere il problema che vi ho spiegato in alto?
-- 
Inviato da Virgilio 
http://newsgroup.virgilio.it
..un servizio di news via web con in piu' l'antispam


Cosa intendi per dare "significato"??
Blood

Blood ha scritto:

Esempio semplice: ho un file con 3 numeri interi 10 150 e 300 (a 
proposito, un file txt con codifica Unicode potrebbe andare 
bene?) e voglio che il mio programma li legga e li memeorizzi su 
delle variabili di tipo int, meglio ancora su un array, fine.
Oggi pomeriggio ho continuato le mie ricerche ed ho trovato che 
a caso mio andrebbe il DataInputStream, ma ho provato ad 
utilizzarlo e mi legge delle cose senza senso.
Grazie per la risposta 
Mel


Prova a guardare qui.
http://www.di.unipi.it/~monta/LSD-02/LSD/Eccezioni/IOfiles/main.html
Blood

 utilizzarlo e mi legge delle cose senza senso.
Forse perchè tu non hai salvato degli int con un DataOutputStream ma hai
scritto solamente dei numeri in un txt, quindi vengono visti come
stringhe...questa è la mia considerazione, magari è sbagliata;-)
Blood

Grazie mille, hai risolto il 70% dei miei problemi.
Blood ha scritto:



 riga e devo quindi memorizzarli in un array.
Come li distingui? Diciamo che tra ogni coppia di numeri c'é uno spazio,
allora fai così:
BufferedReader reader = new BufferedReader(new FileReader(<il tuo file>));
String linea;
while((linea = reader.readLine()) != null) {
//leggi il file a righe
StringTokenizer st = new StringTokenizer(linea," ");
//restituisce i pezzi di stringa tra due spazi
while(st.hasMoreToken()) {
 float num = Float.parseFloat(se.nextToken());
 /* qui fai quello che devi fare col numero, ad esempio
    lo metti in un array */
}
}
Ok? Il concetto è che leggi il file per righe e poi spezzetti ogni riga nei
numeri.
Se non ti importa sapere in che riga sta ogni numero puoi anche leggere
tutto il file, metterlo in una stringa e passare questa allo
stringTokenizer. In fine, se non vuoi usare stringTokenizer perché
programmi da poco e non vuoi incasinarti puoi tranquillamente fare una cosa
tipo:
int ultimo = 0, pos;
while( (pos = linea.indexOf(" ",ultimo)) >= 0) {
 float num = Float.parseFloat(linea.substring(ultimo,pos));
 //fai quello che devi fare col numero
 ultimo = pos+1;
}
Ciao
Matteo
-- 
chi sono e soprattutto chi non sono:
http://www.ilnomedeldominio.it
un piccolo programma per studenti universitari:
http://inutility.ilnomedeldominio.it/imsv/