Newsgroup: it.comp.java
Titolo: Leggere da File

Il mio problema è leggere da un file di testo che contiene numeri, ho
provato a risolverecosì:
  static Double[] file_to_array(String filename) throws IOException
   {
        String r = "r";
        RandomAccessFile in = new RandomAccessFile(filename, r);
 
        Double[] vett=null;
        int a=0;
 
        for (long i=0; i<in.length(); i++){
			 vett[a]=in.readDouble();
			 a++;
	}
 
	in.close();
        return vett;
    }
in realtà mi basterebbe un vettore di double[] e non so bene la
differenza con un Double...
Il Bug dovrebbe comunque essere nell assegnazione di
vett[a]=in.readDouble();
un bel NotPointerException. 
oppure un problema di Cast ... oppure non ho capito come è fatto un
File...
Spero che qualcuno possa aiutarmi... grazie infinite. Alberto

 differenza con un Double...
Double e' una classe mentre double e' un tipo primitivo.
Davide

vett[a]=in.readDouble();
Cambialo in:
vett[a] = (in.readDouble()).doubleValue();
double e' un tipo semplice, le variabili double risiedono nello stack.
Double (D maiuscola) e' una *classe* wrapper per i "double" (d minuscola), e
gli oggetti Double risiedono nello heap. Un _oggetto_ Double ha i suoi
metodi, una variabile double non e' un oggetto (si, e' una inconsistenza,
non e' vero che *everything is an object*) ed ha solo il suo valore.
-- 
"Con questo cosa voglio dire? Non lo so. Pero' c'ho ragione."
(Palmiro Cangini)

     }

        RandomAccessFile in = new RandomAccessFile(filename, r);
[CUT]
Una curiosità: perché usi RandomAccessFile?
-- 
Ciao
	Fabrizio C.

...

Beh perchè il file da leggere contiene una matrice quadrata scritta
così:
2;3;5;6
4;5;6;8
9;8;9;0
1;3;5;7
e dovevo leggere due file cosi e svolgere operazioni sulle matrici...
comunque non so se la soluzione è la migliore ma adesso funziona ti
riporto il codice:
   static double[][] file_to_array(String filename) throws IOException
   {// Returns the contents of the file in a byte array.
        RandomAccessFile in = new RandomAccessFile(filename, "r");
		String line;
 
		double[][] num = new double[3][3];
		int a=0;
		int i=0;
        while((line = in.readLine()) != null)
        {
	  StringTokenizer car =new StringTokenizer(line, "; \n\r");
          do{
	     double tmp = Double.parseDouble(car.nextToken());
	     num[i][a] =tmp;
	     a++;
	  }while(car.hasMoreTokens()!=false);
	  a=0;
	  i++;
	}
	in.close();
        return num;
	}
L'unica cosa che ancora non mi piace è che il vettore num devo
inizializzarlo ad una dimensione tipo [3][3] ma io non dovrei sapere
quant'è grande la matrice nel file... penso di dover usare un
ArrayList... ma non ho capito bene come funziona.

 > vett[a]=in.readDouble();
Nel caso -1-
vett[i]=Double.parseDouble(in.readLine());
ovvero leggi una linea da in(se hai piů numeri separati da spazi sulla
stessa linea, consulta i doc su StringTokenizer) e la converti in un double.
Ciao
--
Paolo Giarrusso
Per rispondere togliere solo "TOGLIMI" dall'indirizzo, non _spam.

1;3;5;7
[CUT]
Bene. Io userei un BufferedReader costruito su di un FileReader (il 
RandomAccessFile mi sembra usato a sproposito).
Ti leggi le linee e le passi ad uno StringTokenizer che ti dice anche 
quanti token legge.
Se sei sicuro della correttezza del file (cioè che la matrice contenuta 
sia veramente quadrata), alla prima riga ti costruisci l'array che ti 
serve e poi... vai di riempimento.
HTH
-- 
Ciao
	Fabrizio C.