PROBLEMA Uso RandomAccessFile

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
Si crea un file di testo con il nome dato in input dall'utente.
Si carica il file con 'n' libri di classe Libro contenuti in un arraylist.
Se chiudo il programma e reinserisco il nome della libreria(file) già esistente a livello di arraylist non ci sono libri.
Come è possibile ovviare a questo problema

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Skills07

Moderatore
Staff Forum
13,389
3,846
Hardware Utente
CPU
Ryzen 7 2700x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
Hard Disk
Samsung Evo 850 250gb,2tb toshiba, 500gb western digital, 256 Ssd silicon power
RAM
16 gb G.Skill Tridentz 3200 mhz RGB
Scheda Video
KFA2 Rtx 2070 super
Monitor
Acer Predator 144hz 2k IPS 27", Hp ES 24" 60 Hz FHD
Alimentatore
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Razer Electra V2
Internet
Fibra Tim 100mb
Sistema Operativo
Windows 10 Pro 64 bit
ciao se magari postassi qualcosa ad esempio del codice, forse potremmo capire cosa stai chiedendo
 

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
Java:
Libro aux = head;
String S = new String();
//Input della variabile Stringa "S"
RandomAccessFile f = new RandomAccessFile(S, "rw" );
for(int i = 0; aux!=null; i++)
            {
                f.writeBytes("Libro Numero " + (i+1));
                f.writeBytes(aux.toString());
                aux = aux.getNext();
            }
            f.close();
Con questo codice viene dichiarata una libreria di nome "S" e viene stampata in un file di testo.
Ora, con RandomAccessFile in modalità "rw" se non trova il file lo crea altrimenti lo riapre.

Il problema è che se io creo il Catalogo "Biblioteca1" e chiudo il programma, lo riapro e reinserisco in S "Biblioteca1", mi riapre lo stesso file ma, la lista del programma, non conosce che ci sono già dei libri inseriti quindi quando faccio un pop dalla testa non mi elimina l'elemento che si trova nel file di testo perchè dice che la lista è vuota.
E' possibile sistemare questo problema oppure no? Grazie :)
 
Ultima modifica:

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
Pubblica anche il codice che legge il file, non solo quello che lo scrive.
Il programma base è quello di scrivere.
Ora se si volesse implementare la gestione di più Biblioteche quindi di più file txt come si dovrebbe fare?
Perché dopo averlo caricato la prima volta, se chiudo il file e riapro lo stesso txt, risulta che i libri precedentemente caricati non ci sono...

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Andretti60

Utente Èlite
3,679
2,463
Hardware Utente
Cosa vuole dire che il problema e' quello di scrivere? A me paret che to lo stia scrivendo, dal codice che hai postato. Piuttosto il problema e' dopo, quando una volta creato il file lo leggi e ne metti il contenuto nella lista che ovviamente e' vuota, avendo appena lanciato il programma.
 

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
Cosa vuole dire che il problema e' quello di scrivere? A me paret che to lo stia scrivendo, dal codice che hai postato. Piuttosto il problema e' dopo, quando una volta creato il file lo leggi e ne metti il contenuto nella lista che ovviamente e' vuota, avendo appena lanciato il programma.
Si ho sbagliato a digitare.
Comunque è proprio questo il problema
In seguito non mi è possibile informare il programma che la lista non è vuota. E non so come fare

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
Leggi il file, una linea per volta, quando la stringa inizia con "Libro Numero" sai che e' l'inizio di un nuovo elemento.
Non l'unico modo, ma basta per iniziare.
Quindi metto il puntatore del file a 0 e quando trova Libro Numero mette i campi nell'oggetto da caricare nella lista.
Ok ma come fare?
Dato che tipo Autore è scritto
Autore = Paperino
Deve andare dopo autore, dopo l'uguale e dopo lo spazio.
Non c'è altro modo? E poi se si dovesse usare questo modo come andarebbe implementato?

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Andretti60

Utente Èlite
3,679
2,463
Hardware Utente
Devi studiare:
1) come leggere un file una linea alla volta
2) le funzioni per riconoscere una stringa all'interno di una stringa
3) le funzioni per estrarre una stringa da un'altra stringa
Sono la base di qualsiasi linguaggio di programmazione.
 

Alessandro001

Nuovo Utente
141
6
Hardware Utente
CPU
Ryzen 5 1600 3.2GHz
Scheda Madre
MSI B350 Tomahawk
Hard Disk
Seagate ST1000DM010 1 TB
RAM
2X8GB Corsair CMK16GX4M2B3000C15 Vengeance
Scheda Video
RADEON RX 580 NITRO+ Radeon RX 580 8GB GDDR5
Monitor
HP 27FW Monitor 27"
Alimentatore
Cooler Master MasterWatt Lite 700 230V
Case
Aerocool Aero-800
Internet
https://www.speedtest.net/result/8773872068.png
Sistema Operativo
Windows 10
Devi studiare:
1) come leggere un file una linea alla volta
2) le funzioni per riconoscere una stringa all'interno di una stringa
3) le funzioni per estrarre una stringa da un'altra stringa
Sono la base di qualsiasi linguaggio di programmazione.
Io ho pensato di mettere dentro una variabile stringa il rigo con readLine e con substring decidere la parola da tenere in considerazione
Dovrebbe funzionare

Inviato da SNE-LX1 tramite App ufficiale di Tom\'s Hardware Italia Forum
 

Entra

oppure Accedi utilizzando