|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
[JAVA]Scrittura su file
Salve a tutti
File atti = new File("/PD_Software/src/FilmRandom/lista"); Scanner input = new Scanner(atti); cosa devo fare per poter anche scrivere o rimuovere stringhe al file atti? |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Ho visto un po' di classi che potrei utilizzare, ma non sò come implementarle nel mio caso.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Esattamente cosa dovresti fare? La lettura e scrittura devono essere due operazioni distinte o hai bisogno mano a mano che leggi di fare delle operazioni di scrittura? Nel secondo caso la classe che dovresti usare credo sia RandomAccessFile: LINK
Se sei nel primo caso basta creare un oggetto PrintWriter e usare i suoi metodi print e/o println: Codice:
PrintWriter output=new PrintWriter(atti); Codice:
PrintWriter output=new PrintWriter(new FileOutputStream(atti,true)); |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Ti spiego la mia situazione. Ho un'interfaccia con due bottoni, aggiungi e rimuovi, che permettono di rimuovere o aggiungere un elemento a una lista di elementi. All'apertura del programma la lista degli elementi viene inizializzata da un file di testo, in cui in ogni riga c'è un elemento. A quanto ho capito dovrei utilizzare il primo per scrivere. E per rimuovere?
Ho provato a utilizzare questo PrintWriter output=new PrintWriter(new FileOutputStream(atti,true)); ma sia col metodo print che con write, sul file non viene scritto nulla... Ultima modifica di Attila7894 : 08-09-2009 alle 18:55. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Al termine della scrittura devi chiudere lo stream con
Codice:
output.close() |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
prima di close chiama flush().
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Quando chiudi lo stream viene fatto automaticamente un flush
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Grazie mille a entrambi per la disponibilità. Potreste spiegarmi l'utilità di flush() ?
Inoltre, come faccio stavolta a rimuovere una certa stringa dal file di testo? |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2782
|
Il flush serve a scrivere ciò che si trova sul buffer sul disco. Se non fai né il flush né la close ciò che hai scritto sul buffer resta lì e le modifiche non vengono salvate sul disco.
Per togliere una certa riga devi leggere l'intero file, rimuovere la stringa che vuoi rimuovere e riscrivere l'intero file. EDIT: in verità se fai una lettura riga per riga con l'ausilio di un file aggiuntivo puoi leggere una riga dal primo file e se non è quella che devi rimuovere ricopiarla nel secondo file. Vai avanti così fino alla fine e poi cancelli il vecchio file e lo rimpiazzi con il nuovo. |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
Attraverso la classe RandomAccessFile puoi accedere al file in maniera selezionata, ma oltre al fatto di conoscere l' esatta posizione della stringa (potresti anche ricavarla, ma non ne vale la pena) ti si pone il problema di fillarne il valore per tutta la dimensione. |
|
|
|
|
|
|
#12 |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Grazie, un'ultima cosa. Ho un Box box in cui aggiungo oggetti scrivendo, ogni volta
FilmRandom.box.add(new JLabel(FrameAdd.txtadd.getText())); gli oggetti JLabel non hanno quindi un proprio nome. Se io ne volessi togliere uno, sapendo il valore della stringa, cosa dovrei fare? |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Mar 2007
Messaggi: 7863
|
Quote:
|
|
|
|
|
|
|
#14 | |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Quote:
Ho creato questo metodo ma non funziona. file è dove è tenuta la lista, temp è il file di testo di supporto. Alla fine del metodo file è vuoto... public static void removeFromFile(String a) throws IOException{ temp.createNewFile(); Scanner scan = new Scanner(file); PrintWriter output=new PrintWriter(new FileOutputStream(FilmRandom.temp,true)); while(scan.hasNext()){ output.println(scan.next()); output.flush(); } output.close(); FilmRandom.file.delete(); FilmRandom.file.createNewFile(); Scanner scann = new Scanner(temp); PrintWriter outputt=new PrintWriter(new FileOutputStream(FilmRandom.file,true)); String s; while(scann.hasNext()){ s=scann.next(); if(s!=a)outputt.println(s); } temp.delete(); } |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Visto che all'apertura del programma la lista degli elementi viene caricata tramite lettura dei dati da un file di testo, perchè non caricarla in una qualche struttura dati in memoria? Poi le varie operazioni di ADD e DELETE le fai sulla struttura dati e il file di testo lo riscrivi solo a chiusura programma (o in altro momeno da te scelto). L'unico problema con questa soluzione è che se per qualche ragione l'applicazione fa "bum" a runtime (es. si stacca la spina del pc) prima dell'avvenuta scrittura sul file, le modifiche fatte alla lista vanno perse.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Quote:
inoltre io ho "risolto" questo problema facendo un salvataggio su file di backup e un "autocaricamenteo" in caso di crash...certo se hai la botta di ciao a tutti
__________________
My gaming placement |
|
|
|
|
|
|
#17 | |
|
Member
Iscritto dal: Apr 2007
Messaggi: 144
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
|
Quote:
__________________
My gaming placement |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:51.












ciao a tutti








