Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile
Lenovo ha lanciato il ThinkTab X11 rimettendo piede nel segmento dei tablet Android con il marchio Think dopo oltre un decennio di assenza. Il risultato è un dispositivo che prende una direzione precisa: massima dotazione funzionale, costruzione resistente, autonomia fuori dagli schemi
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot
AMD Advancing AI è l'appuntamento annuale con il quale l'azienda americana mostra quelle che sono le proprie novità dal versante datacenter. Tra piattaforma Helios, GPU Instinct MI455X e processori EPYC di sesta generazione tutto quello che serve per processare l'IA sempre più complessa ed esigente
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader
BOOX Go 6 Gen II porta per la prima volta il supporto allo stilo su un e-reader da 6 pollici, affiancando 3 GB di RAM al collaudato Snapdragon 665 e un design rivisto con scocca posteriore a costolature. Su carta la proposta è interessante, ma Android 11 fuori supporto, l'assenza di un alloggiamento per il pennino e un'autonomia ridotta rispetto agli e-reader tradizionali sono i compromessi da accettare
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-06-2011, 15:01   #1
niccoleo
Senior Member
 
L'Avatar di niccoleo
 
Iscritto dal: Jul 2008
Messaggi: 425
[JAVA]scrivere oggetti in un file binario

Ciao a tutti,
mi trovo a scrivere un programmino per la gestione di dizionari.
Il problema è che a inizio e fine programma dovrei rispettivamente salvare tutti i dizionari (nell'oggetto lista) su file e aprire da file salvato la volta successiva.

EDIT

sono riuscito a far funzionare la scrittura. per la lettura ho un problema di differenza di tipo.
come fare a deserializzare un oggetto di un tipo inventato da me? (ARCHIVIO)
di seguito il codice

Codice:
import java.util.Vector;
import java.io.*;

public class ArchivioMain implements Serializable {
	public static void main(String[] args){
		
		
			
			
		char com=' ';
		com=Input.readChar("premi [a] per aprire un file esistente.[c] per continuare ");
		
		if (com=='a'){String nf=Input.readString("inserisci il nome del file salvato "); apri(nf);};
		
		
		Archivio lista= new Archivio();
			char scelta=' ';
		
			while(scelta != '5'){
				System.out.println(" ");
				System.out.println("[1] Inserisci Dizionario");
				System.out.println(" ");
				System.out.println("[2] stampa ");
				System.out.println(" ");
				System.out.println("[3] cancella");
				System.out.println(" ");		
				System.out.println("[4] Salva");
				System.out.println(" ");
				System.out.println("[5] Esci");
				System.out.println(" ");
				System.out.println("Cerca nei dizionari: inserisci la lettera per ricercare per: [n]Nome [l]Lingua [t]Termini [s]Sinonimi [c]Contrari ");
				System.out.println(" ");
				scelta = Input.readChar("----> ");
				
				if (scelta=='1'){
					String nome= Input.readString("Nome dizionario: ");
					String lingua= Input.readString("Lingua: ");
					int nt = Input.readInt("Quanti termini vuoi inserire? ");
					int i=0;
					Vector term = new Vector();
					for (i=0;i<nt;i++){
					String descrizione= Input.readString("Descrizione: ");
					String sinonimi= Input.readString("Sinonimi: ");
					String contrari= Input.readString("Contrari: ");
					Termine c= new Termine(descrizione,sinonimi,contrari);
					term.add(c);
					}
					lista.add(nome,lingua,term);
				}
				
			   if (scelta=='n'){
				   String cercadiz=Input.readString("Inserisci nome dizionario: ");
					lista.mostra1(cercadiz);
			   }
					
			   if (scelta=='l'){
				   String cercalingua=Input.readString("Inserisci la lingua: ");
					lista.mostra2(cercalingua);
			   }
				
			   if (scelta=='t'){
					String cercater=Input.readString("Termine da ricercare: ");
					lista.mostra3(cercater);
			   }
					
			   if (scelta=='s'){
					String cercasin=Input.readString("Sinonimo da ricercare: ");
					lista.mostra4(cercasin);
			   }
			   if (scelta=='c'){
					String cercacon=Input.readString("Contrario da ricercare: ");
					lista.mostra5(cercacon);
			   }
					
			   if (scelta=='2'){
				   lista.mostra();
			   }
				
			   if (scelta=='3'){
				   lista.mostra();
					int x = Input.readInt("Quale dizionario vuoi cancellare? ")-1;   
					lista.remove(x);
			   }
			
			   if (scelta=='4'){
			String nomefile = Input.readString("Inserisci il nome del file dove salvare ");
				  salva(lista,nomefile);
				  
				}
			   
			   
			   
		}	
			
	
			}
	
	

	private static void salva (Archivio lista, String nomefile) {
		try {
			FileOutputStream ostream = new FileOutputStream(nomefile);
			ObjectOutputStream p = new ObjectOutputStream(ostream);

			p.writeObject(lista);

			p.flush();
			ostream.close();
			} catch (Exception e)  {System.out.println("Scrittura fallita "+e);}
			
	}
	
	
	private static Archivio apri(String nomefile) {
		Archivio obj=new Archivio();
	try {
		FileInputStream istream = new FileInputStream(nomefile);
		ObjectInputStream p = new ObjectInputStream(istream);

		obj=p.readObject();  //QUA L'ERRORE. NON POSSO CONVERTIRE UN OGGETTO IN ARCHIVIO(IL MIO TIPO).COME RISOLVERE?

		istream.close();

		return obj;
		
		} catch (Exception e) { System.out.println("lettura "+e);return null;}

		}
			
	}

ho provato anche con implement serializable; ma niente.

ringrazio in anticipo chi mi vorrà rispondere.
grazie ciao
__________________
concluso positivamente con : ElleGi92,nightborn,semmy83,Cuto82,damiano77, nicolagragnani,Pantarena,Gabry17,Pagliatek, kaetan, GIACOMO-_ e molti altri

Ultima modifica di niccoleo : 08-06-2011 alle 17:54.
niccoleo è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2011, 15:11   #2
DvL^Nemo
Senior Member
 
L'Avatar di DvL^Nemo
 
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4856
Quote:
Originariamente inviato da niccoleo Guarda i messaggi
Ciao a tutti,
mi trovo a scrivere un programmino per la gestione di dizionari.
Il problema è che a inizio e fine programma dovrei rispettivamente salvare tutti i dizionari (nell'oggetto lista) su file e aprire da file salvato la volta successiva.
Mi sono letto veramente molta roba sulla serializzazione, su come si fa l'input e l'output ma non riesco a far funzionare il discorso.

quando vado a fare la scrittura ad esempio mi dice che non può usare
os.writeObject(lista);
in quanto lista è di tipo Archivio (che ho creato io)

in input invece

l1= is.readObject();

mi dice che il metodo readObject non esiste.

Qualcuno può darmi una mano? Di seguito il codice in questione :

ho provato anche con implement serializable; ma niente.

ringrazio in anticipo chi mi vorrà rispondere.
grazie ciao

Un'occhiata al javadoc no eh ?
http://download.oracle.com/javase/6/...putStream.html
__________________
TIM FTTC 200/20 LIVE SPEEDTEST
DvL^Nemo è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2011, 15:13   #3
niccoleo
Senior Member
 
L'Avatar di niccoleo
 
Iscritto dal: Jul 2008
Messaggi: 425
Quote:
Originariamente inviato da DvL^Nemo Guarda i messaggi
si ho letto anche questo, infatti cercavo soluzione a come ovviare al problema di differenza di tipo.
almeno da quello che ho capito..
sai darmi un consiglio?
grazie!

EDIT

ho aggiornato il post in alto
__________________
concluso positivamente con : ElleGi92,nightborn,semmy83,Cuto82,damiano77, nicolagragnani,Pantarena,Gabry17,Pagliatek, kaetan, GIACOMO-_ e molti altri

Ultima modifica di niccoleo : 08-06-2011 alle 17:55.
niccoleo è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2011, 21:03   #4
Mixmar
Senior Member
 
L'Avatar di Mixmar
 
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
Stando a quanto è scritto qui, "Archivio" dovrebbe implementare Serializable: è così?
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur
Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N
Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN
Mixmar è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2011, 22:37   #5
niccoleo
Senior Member
 
L'Avatar di niccoleo
 
Iscritto dal: Jul 2008
Messaggi: 425
Quote:
Originariamente inviato da Mixmar Guarda i messaggi
Stando a quanto è scritto qui, "Archivio" dovrebbe implementare Serializable: è così?
si, comunque ho risolto con un cast di da object a archivio:
codice corretto

Spoiler:
Codice:
import java.util.Vector;
import java.io.*;

public class ArchivioMain implements Serializable {
	public static void main(String[] args){
		
		
			
			
		char com=' ';
		com=Input.readChar("Premi [a] per aprire un file esistente.[c] per continuare  --> ");
		
			
		Archivio lista= new Archivio();
		String nf="";
		if (com=='a') {nf=Input.readString("Inserisci il nome del file salvato --> "); lista = (Archivio) apri(nf);} //HO MESSO UN CAST COME SUGGERITO DA Eclipse.ripassare cast
			
			char scelta=' ';
			System.out.println(" ");
			System.out.println("Benvenuto in dizionario 1.0 di Albertini Niccolò e Jacopo Baldini");
			while(scelta != '5'){
				System.out.println(" ");
				System.out.println("[1] Inserisci Dizionario");
				System.out.println(" ");
				System.out.println("[2] stampa ");
				System.out.println(" ");
				System.out.println("[3] cancella");
				System.out.println(" ");		
				System.out.println("[4] Salva");
				System.out.println(" ");
				System.out.println("[5] Esci");
				System.out.println(" ");
				System.out.println("Cerca nei dizionari: inserisci la lettera per ricercare per: [n]Nome [l]Lingua [t]Termini [s]Sinonimi [c]Contrari ");
				System.out.println(" ");
				scelta = Input.readChar("----> ");
				
				if (scelta=='1'){
					String nome= Input.readString("Nome dizionario: ");
					String lingua= Input.readString("Lingua: ");
					int nt = Input.readInt("Quanti termini vuoi inserire? ");
					int i=0;
					Vector term = new Vector();
					for (i=0;i<nt;i++){
					String descrizione= Input.readString("Descrizione: ");
					String sinonimi= Input.readString("Sinonimi: ");
					String contrari= Input.readString("Contrari: ");
					Termine c= new Termine(descrizione,sinonimi,contrari);
					term.add(c);
					}
					lista.add(nome,lingua,term);
				}
				
			   if (scelta=='n'){
				   String cercadiz=Input.readString("Inserisci nome dizionario: ");
					lista.mostra1(cercadiz);
			   }
					
			   if (scelta=='l'){
				   String cercalingua=Input.readString("Inserisci la lingua: ");
					lista.mostra2(cercalingua);
			   }
				
			   if (scelta=='t'){
					String cercater=Input.readString("Termine da ricercare: ");
					lista.mostra3(cercater);
			   }
					
			   if (scelta=='s'){
					String cercasin=Input.readString("Sinonimo da ricercare: ");
					lista.mostra4(cercasin);
			   }
			   if (scelta=='c'){
					String cercacon=Input.readString("Contrario da ricercare: ");
					lista.mostra5(cercacon);
			   }
					
			   if (scelta=='2'){
				   lista.mostra();
			   }
				
			   if (scelta=='3'){
				   lista.mostra();
					int x = Input.readInt("Quale dizionario vuoi cancellare? ")-1;   
					lista.remove(x);
			   }
			
			   if (scelta=='4'){
			String nomefile = Input.readString("Inserisci il nome del file dove salvare ");
				  salva(lista,nomefile);
				  
				}
			   
			   
			   
		}	
			
	
			}
	
	

	private static void salva (Archivio lista, String nomefile) {
		try {
			FileOutputStream ostream = new FileOutputStream(nomefile);
			ObjectOutputStream p = new ObjectOutputStream(ostream);

			p.writeObject(lista);

			p.flush();
			ostream.close();
			} catch (Exception e)  {System.out.println("Scrittura fallita "+e);}
			
	}
	
	
	private static Object apri(String nomefile) {
		Object obj=new Object();
	try {
		FileInputStream istream = new FileInputStream(nomefile);
		ObjectInputStream p = new ObjectInputStream(istream);

		obj=p.readObject();

		istream.close();

		return obj;
		
		} catch (Exception e) { System.out.println("Errore lettura "+e);return null;}

		}
			
	}
__________________
concluso positivamente con : ElleGi92,nightborn,semmy83,Cuto82,damiano77, nicolagragnani,Pantarena,Gabry17,Pagliatek, kaetan, GIACOMO-_ e molti altri
niccoleo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Il tablet rugged leggero e sottile: Lenovo ThinkTab X11 offre resistenza, doppia USB-C e batteria rimovibile Il tablet rugged leggero e sottile: Lenovo Think...
AMD Advancing AI 2026: l'hardware AMD per le elaborazioni IA del futuro, tra GPU, CPU e robot AMD Advancing AI 2026: l'hardware AMD per le ela...
Tascabile e con Android: BOOX Go 6 Gen II è diverso da tutti gli altri e-reader Tascabile e con Android: BOOX Go 6 Gen II &egrav...
Recensione Lenovo Idea Tab Plus: il tablet da 12 pollici che costa meno di 300 euro Recensione Lenovo Idea Tab Plus: il tablet da 12...
Oltre il contante e le crypto: tutto sull'Euro Digitale e la nuova sovranità monetaria europea Oltre il contante e le crypto: tutto sull'Euro D...
Anthropic lancia Claude Opus 5: eclissa ...
Batterie a terra per Varta, bancarotta v...
Elon Musk: l'intelligenza artificiale su...
Ryzen 7 9800HX3D: il miglior processore ...
Google porta Gemini Live sui vecchissimi...
Corsair Platform:4 in offerta: la scriva...
Il creatore di Disagea sull'addio dei gi...
Fastweb + Vodafone entra nello SmartCity...
AI Act europeo: dal 2 agosto partono i n...
Da 1,3 a 10 miliardi in due mesi: chi è ...
Schede video RTX: NVIDIA comunica nuovi ...
GTA 6, i 60 fps stabili potrebbero esser...
Questa Smart TV QLED da 40 pollici con H...
Ring in sconto fino al 57%: videocitofon...
Pubblicità su Windows con i monit...
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: 23:37.


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