Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-04-2009, 23:38   #1
divincodin
Member
 
Iscritto dal: Nov 2008
Messaggi: 64
[Java] Lettura scrittura file txt

Ultimo step del mio pregetto
Se nelle cose precedenti ero scarso,qui sono zero tagliato
Cmq,in sostanza ho dei file txt.Ogni riga del file txt contiene un commento (riferito ad una determinata immagine jpg).Ogni volta che passo alla visualizzazione della foto corrente,deve cambiare anche il commento correte (che verrà visualizzato in un 'area di testa).Quello che in sostanza faccio è di caricare tutti i commenti in un ArrayList.Poi attraverso l'area di testo dovrei poter dare la possibilità di modificare il commento corrente e poi tramite un bottone "salva" andarlo ad aggiornare nel file txt.
Quello che chiedo è se in questo caso dovrei usare l'accesso sequenziale o casuale?
divincodin è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 02:10   #2
PGI-Bis
Senior Member
 
L'Avatar di PGI-Bis
 
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
Se quello che vuoi fare è dire: ok, l'utente ha cambiato il commento numero 10, adesso prendo il file e riscrivo solo la riga 10 la scelta dell'accesso casuale o sequenziale in sè è irrilevante. Un file è una successione di byte, se vuoi andare a rimpiazzare una riga con un'altra devi sovrascrivere tutti i byte che occupa quella riga nel file assicurandoti che l'ultimo sia un ritorno a capo. Se la stringa è più corta possiamo anche pensare di riempire lo spazio che resta con dei caratteri vuoti ma se è più lunga impastrocchi la linea successiva.

Se stabilisci che i commenti devano avere tutti la stessa dimensione in byte allora puoi andare a rimpiazzare un blocco con un altro con l'accesso casuale.

Ma è un approccio un po' primitivo. Tieni conto che a scrivere un file di testo di un megabyte l'hardware odierno impiega un amen e di commenti in un megabyte ne puoi mettere a bizzeffe. Magari frammenti un po' l'hard disk dell'utente. Alla fine sarebbe meglio un bel database embedded a là berkeley DB. Con dieci righe di codice scrivi tutti i commenti che vuoi senza doverti preoccupare del numero di caratteri.
PGI-Bis è offline   Rispondi citando il messaggio o parte di esso
Old 30-04-2009, 12:22   #3
pequeno
Member
 
L'Avatar di pequeno
 
Iscritto dal: Jul 2005
Città: Potenza
Messaggi: 126
Penso che la soluzione proposta da PGI (utilizzare un db embedded) sia la cosa migliore. Ti evita diversi problemi, tipici dei file di testo.
In alternativa, se proprio vuoi utilizzare dei file, usa xml che ti consente di strutturare in maniera più determinata i dati, rispetto ad un semplice file txt e ti solleva da questioni tipo lunghezza dei campi, ritorno a capo etc...
Ovviamente il tutto dipende dalla quantità di dati da leggere/memorizzare.
__________________
Un'interfaccia per domarli, un package per trovarli tutti, un riferimento per ghermirli e nel framework incatenarli."
Il Signore degli Oggetti
pequeno è offline   Rispondi citando il messaggio o parte di esso
Old 04-05-2009, 18:45   #4
divincodin
Member
 
Iscritto dal: Nov 2008
Messaggi: 64
Prima di scrivere qui ho chiesto un pò ad alcuni amici e pure loro mi hanno consigliato l'utilizzo di un db,ma a me è stato chiesto di farlo con file txt.
Alla fine i file txt devono contenere 64 righe ciascuno,ognuna delle quali conterrà un commento.
Io francamente su lettura e scrittura file sn ignorante in materia e non so proprio come fare.Ho provato a buttare giù qualcosa del tipo:
Codice:
 try
  {
    RandomAccessFile raf = new RandomAccessFile(FileDiTestodir,"rw");
    raf.seek(indexcorrente);
    raf.write(TextArea.getText());
    raf.close();
   }
        
    catch(IOException exx)
    {}
dove indexcorrente è:
Codice:
  indexcorrente=ListaIcone.getSelectedIndex();
in sostanza l'indice dell'i-esimo elemento cliccato della lista di icone.
Quindi il 1° elemento della lista è 0,1,2...e così via.Passando questo indice al RandomAccessFile nel seek vorrei andare a scrivere nella riga specificata il contenuto della textArea.Ma forse mi sa che non ho ben capito il funzionamento del puntatore seek!
Me la invento bene la programmazione,vero??!
divincodin è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2009, 09:44   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da divincodin Guarda i messaggi
Ultimo step del mio pregetto
Se nelle cose precedenti ero scarso,qui sono zero tagliato
Cmq,in sostanza ho dei file txt.Ogni riga del file txt contiene un commento (riferito ad una determinata immagine jpg).Ogni volta che passo alla visualizzazione della foto corrente,deve cambiare anche il commento correte (che verrà visualizzato in un 'area di testa).Quello che in sostanza faccio è di caricare tutti i commenti in un ArrayList.Poi attraverso l'area di testo dovrei poter dare la possibilità di modificare il commento corrente e poi tramite un bottone "salva" andarlo ad aggiornare nel file txt.
Quello che chiedo è se in questo caso dovrei usare l'accesso sequenziale o casuale?
e
Quote:
Prima di scrivere qui ho chiesto un pò ad alcuni amici e pure loro mi hanno consigliato l'utilizzo di un db,ma a me è stato chiesto di farlo con file txt.
Alla fine i file txt devono contenere 64 righe ciascuno,ognuna delle quali conterrà un commento
....
A questo punto, la cosa più semplice secondo me sarebbe questa:
- all'avvio dell'applicazione oppure al momento opportuno (caricamento della finestra/pannello dove vengono visualizzate le immagini con i commenti editabili) ti leggi tutto il file dei commenti in un colpo solo, riga per riga, e ogni riga la memorizzi in una collezione di String in memoria;
- quando l'utente edita un commento, in pratica viene modificata solo la singola String nella tua collezione in memoria;
- alla chiusura dell'applicazione oppure al momento opportuno (chiusura della finestra/pannello dove vengono visualizzate le immagini con i commenti editabili) iteri la tua collezione di String in memoria e le stampi sul file i testo, andando in pratica a sovvrascriverlo.

Questo perchè per modificare una singola riga nel file di testo dovresti riscriverlo tutto con la riga modificata, ogni volta, il che non è il massimo della praticità, secondo me.
__________________

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 05-05-2009, 19:36   #6
divincodin
Member
 
Iscritto dal: Nov 2008
Messaggi: 64
Sto provando a seguire il tuo consiglio.
In sostanza prima leggo il file e carico riga x riga il contenuto in un Arraylist

Codice:
BufferedReader input=newBufferedReader(newFileReader(newFile(FileDiTestodir)));
       String linea=raf.readLine();
       righe=new ArrayList();
       //riempio l' ArrayList
       while(linea!=null)
       { 
        righe.add(linea); // aggiunge una linea letta alla lista di String
        linea=raf.readLine();
       }
Poi ho creato un array di stringhe "righeToArra" che avrà lo stesso contenuto dell'Arraylist...e per salvare le modifiche temporanee,userò questo.
L'aggiornamento va fatto sempre xkè,con l'applicazione aperta,l'utente può aprire un'altra cartella con altre immagini,quindi la sovrascrittura dei commenti nel file va fatta ogni volta che c'è una modifica.
Infatti ogni volta che si preme il bottone "salva" scorro l'array di stringhe e lo copio dentro l'ArrayList.
(ancora dovrei fare la vera a propria scrittura sul file...x adesso ho solo sostituito la modica nell'i-esima posizione dell'array temporaneo)
Però almeno temporaneamente dovrebbe essere aggiornato il commento,no?
Invece se premo su di un'altra foto e poi ripremo su quella alla quale ho cambiato il commento...c'è sempre il vecchio commento!

Codice:
    if(source==salva)
    {
      //riempio l'array di stringhe che userò per salvare le modifiche temporanee
      //ai commenti,fatte tramite la JTextArea.
      String[] righeToArray=(String[])righe.toArray(new String[1]);

      
      //prendo il contenuto della JTextArea e salvo il commento appena modificato 
      //nella posizione "indexcorrente" dell'array "righeToArray"
      righeToArray[indexcorrente]=TextArea.getText();
      for(int i=0;i<righeToArray.length;i++)
      { 
       righe.add(righeToArray[i]);
      }
    }
Dov'è che sbaglio?

Ultima modifica di divincodin : 05-05-2009 alle 19:38.
divincodin è offline   Rispondi citando il messaggio o parte di esso
Old 06-05-2009, 09:26   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Avevo risposto punto per punto, poi mi sono partite un paio di ditate di troppo e ho perso il messaggio.
Riassumo brutalmente quello che prima avevo scritto con molta più calma:

a) non hai bisogno di copiare il contenuto della collezione di String in un array di String; è inutile e anzi prono ad errori.

b) l'errore potrebbe essere dovuto dal fatto che tu carichi la collezione di String dal file, e poi te ne fai una copia sotto forma di array di String: magari usi una di queste due collezioni di String per aggiornare il contenuto della JTextArea però poi usi l'altra per memorizzare le modifiche a runtime dei commenti.


Questo invece merita un quote e relativa risposta:
Quote:
Poi ho creato un array di stringhe "righeToArra" che avrà lo stesso contenuto dell'Arraylist...e per salvare le modifiche temporanee,userò questo.
L'aggiornamento va fatto sempre xkè,con l'applicazione aperta,l'utente può aprire un'altra cartella con altre immagini,quindi la sovrascrittura dei commenti nel file va fatta ogni volta che c'è una modifica.
All'evento "aperturta di un'altra cartella con altre immagini" l'applicazione potrebbe rispondere così:
- iterazione di ogni String nella collezione in memoria e sua stampa sul file dei commenti aperto in sovvrascrittura.
- chiusura del file.
- apertura in lettura del nuovo file dei commenti (quello della nuova cartella immagini).
- caricamento della collezione di String che rappresenta i commenti contenuti nel file.


L'idea sarebbe quella di modificare al volo la collezione di String in memoria; il file dei commenti verrebbe soltanto toccato in lettura e in scrittura rispettivamente al momento dell'apertura di una cartella con immagini e al momento dell'abbandono della cartella corrente.
__________________

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)

Ultima modifica di banryu79 : 06-05-2009 alle 09:29.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 07-05-2009, 17:37   #8
divincodin
Member
 
Iscritto dal: Nov 2008
Messaggi: 64
Mi sa che,ad aggiornare temporaneamente l'Arraylist,ci sono riuscito:
Codice:
if(source==salva)
      {
       //con "set" sostituisco il commento modificato con quello corrispondente
        righe.set(indexcorrente,TextArea.getText());
        
       //una volta salvato il contenuto della JTextArea,riporto
       //il bottone "salva" inattivo
       salva.setEnabled(false);
      }
Adesso non mi resta che richiamare un metodo che riscriva tutto il contenuto dell'arraylist nel corrispondente file txt...non appena l'utente sta x aprire una nuova cartella oppure sta x chiudere l'applicazione.
divincodin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
Giorgia Meloni 'una di noi': Palazzo Chi...
Airbus richiama oltre 6.000 A320: rischi...
Tra open hybrid cloud e sovranità...
Il nuovo SSD Samsung è fatto con ...
Russia contro WhatsApp: il piano per spe...
Battlefield 6, oltre 2,39 milioni di ten...
La Cina spiazza tutti: nuovo chip per l'...
Nexperia, altro che caso chiuso: il caos...
Nuova tecnologia AMD FSR Ray Regeneratio...
Motorola Edge 60 Neo e Motorola Moto Wat...
Weekend e offerte Amazon Black Friday ag...
Il tuo indirizzo IP è compromesso...
Eureka J15 Evo Ultra in super sconto: or...
Robot aspirapolvere in super sconto per ...
Black Friday Amazon: le migliori occasio...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:10.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v