PDA

Visualizza la versione completa : [Java]Scrivere su file


guylmaster
11-02-2005, 22:42
Inanzi tutto preannuncio che sono un neofita del java, non ho nemmeno finito di leggere il mio manuale di java quindi scusatemi se magari faccio domande che sembrano ovvie per molti :fagiano:

Ho appena studiato il capitolo sulla manipolazione dei file, a dir il vero il capitolo trattava solo la lettura tramite l'oggetto FileReader.

Ecco un piccolo programma che ho creato tramite ciò che ho imparato, completamente funzionante :sbav:



import java.io.*;

public class file2{

public static void main(String[]args) throws IOException
{
//inposto flusso dati
BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
//Percorso file di input
String input = "input.txt";
//imposto flusso del file
BufferedReader fileIn = new BufferedReader(new FileReader(input));

String currentLine = fileIn.readLine();
double somma = 0;
while(currentLine != null)
{
//visualizza riga corrente
System.out.println(currentLine);
double value = Double.parseDouble(currentLine);
somma = somma + value;
//leggi stringa successiva
currentLine = fileIn.readLine();
}
System.out.println(somma);
}



}



Ora vorrei sapere se volessi scrivere e/o cancellare qualcosa sul mio file "input.txt", ad esempio un numero o una lettera (il mio programma legge solamente) se non una stringa, come si fa? potete farmi un esempio, magari un piccolo programma (o anche una modifica al mio proramma) funzionante che esegua la scrittura sul file input.txt ?

Perchè ho letto sulle API qualcosa riguardo l'oggetto FileWriter però un pò per l'inglese (ho trovato solo le api in inglese), un pò per il fatto che non me ne intendo ancora moltissimo non sono riuscito a concludere nulla.

Grazie mille in anticipo,
Guylmaster.

perzem
12-02-2005, 11:38
public boolean salva(){
PrintWriter out=null;
int i;
try{
OutputStreamWriter fout = new OutputStreamWriter(new FileOutputStream(
"fileoutput",true)); //true per fare l'append e non sovrascrivere
out = new PrintWriter(fout);
out.print(qua metti quello che vuoi scrivere);
out.close();
out.flush();
}catch(Exception e){return false;}
return true;}

Questa è la base della scrittura su file poi tu puoi aggiungere altri print(), metter cicli e cosi via...
non ti posso postare di più perchè viene da un progetto un esteso e non capiresti molto

Per modificare un file devi fare prima una lettura salvando il contenuto in una struttura dati, modificare la struttura dati e poi riscrivere sul file...

guylmaster
12-02-2005, 15:37
In giro ho trovato anche il seguente codice, mi sapresti dire che cambia dal tuo al mio?



String stringa = "bau";

PrintStream ps = new PrintStream( new FileOutputStream(input, false) );
ps.println(stringa);
ps.close();


In ogni caso per sovrascrivere devi imagazzinare tutto in un vettore e poi riscrivere l'intero file? non puoi sovrascrivere nemmeno riga per riga?

perzem
12-02-2005, 15:51
per la printStream vai qui e mi pare di aver capito che traduce tutto in bytes e li scrive...

http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html

Per sovrascrivere potresti anche leggere il file riga per riga, analizzarla con uno StringTokenizer, modificarla dove serve e poi riscriverla nella sua pos.

guylmaster
12-02-2005, 16:12
Originariamente inviato da perzem
per la printStream vai qui e mi pare di aver capito che traduce tutto in bytes e li scrive...

http://java.sun.com/j2se/1.4.2/docs/api/java/io/PrintStream.html

Per sovrascrivere potresti anche leggere il file riga per riga, analizzarla con uno StringTokenizer, modificarla dove serve e poi riscriverla nella sua pos.

Per analizzarla ho studiato l'index.Of() o qualcosa del genere. Quindi potrei anche analizzarlo e reiscriverlo riga per riga. Per caso riesci a buttamele giu due righe che leggono e analizzano riga per riga per poter capire meglio? :)

perzem
12-02-2005, 16:38
Questa legge la riga da file.
Pos rappresenta la posizione nel file e viene calcolata con il numero di caratteri, quindi quando la chiami la prima volta gli passi 0 (così si mette all'inizio del file),poi per le chiamate future dovrai sommarci le lunghezze delle righe lette + 2 caratteri per ogni riga.



public static String LeggiDaFile1(long pos){
try{
RandomAccessFile out = new RandomAccessFile("input","r");
out.seek(pos);
String s = out.readLine();
out.close();
return s;
}catch(IOException e){
return null;//"ERRORE : lettura da file";
}
}



Per lo StringTok



String s=LeggiDaFile1(0);
int cont=0;
StringTokenizer st = new StringTokenizer(s," ", false);
do{
cont=cont+s.length()+2;
temp=st.nextToken();
try {
while(st.hasMoreTokens()){

//qui ci metti le tue funz.


temp=st.nextToken();
}
s = LeggiDaFile(cont);
} catch (Exception e) {return false;}
}while(s!=null);
return true;

l'ho fatta un po' a mente perchè sul mio pc stranamente StringTok non ne vuol sapere di girare

Loading