Salve a tutti,è possibile salvare un array bidimensionale su file e poi caricarlo senza dover scorrere manualmente tutti i caratteri?
Se si,come?
Grazie in anticipo per le eventuali risposte![]()
Salve a tutti,è possibile salvare un array bidimensionale su file e poi caricarlo senza dover scorrere manualmente tutti i caratteri?
Se si,come?
Grazie in anticipo per le eventuali risposte![]()
No. Devi scorrerlo, sta a te scegliere come! (se per caso dovesse esistere un modo smentitemi pure).Originariamente inviato da many85
Salve a tutti,è possibile salvare un array bidimensionale su file e poi caricarlo senza dover scorrere manualmente tutti i caratteri?
Se si,come?
Grazie in anticipo per le eventuali risposte![]()
Esiste la serializzazione, che permette di salvare lo stato di un oggetto su un file e poi recuperarlo..tuttavia in questo caso si tratta di un oggetto.
purtroppo bisogna scorrersi gli elementi ad uno ad uno
ecco, ti ho fatto uno scheletro in 10 min
codice:import java.util.Random; import java.io.*; /** * Progetto di esempio sull'utilizzo degli stream di byte o strutturati * @author Naruto 92 */ public class Pippo implements Serializable { private int elementi[][]; /** * Costruttore degli oggetti della classe Pippo */ public Pippo(){ elementi=new int[10][10]; } /** * Riempie la matrice di numeri casuali tra 0 e 9 */ public void caricaElementiCasuali(){ Random rnd=new Random(); for(int r=0; r<elementi.length; r++){ for(int c=0; c<elementi.length; c++){ elementi[r][c]=rnd.nextInt(10); } } } /** * Salva la matrice sul disco */ public void salva(){ try{ ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("dati")); for(int r=0; r<elementi.length; r++){ for(int c=0; c<elementi.length; c++){ out.writeInt(elementi[r][c]); } } out.close(); }catch(Exception e){ System.out.println("Errore nella scrittura del file!"); } } /** * Carica la matrice dal disco */ public void carica(){ try{ ObjectInputStream in=new ObjectInputStream(new FileInputStream("dati")); for(int r=0; r<elementi.length; r++){ for(int c=0; c<elementi.length; c++){ elementi[r][c]=in.readInt(); } } in.close(); }catch(Exception e){ System.out.println("Errore nell'apertura del file!"); } } /** * Svuota la matrice riempiendola di -1 */ public void svuota(){ for(int r=0; r<elementi.length; r++){ for(int c=0; c<elementi.length; c++){ elementi[r][c]=-1; } } } /** * Stampa la matrice * Dopo aver stampato la matrice stampa tre righe vuote */ public void stampa(){ for(int r=0; r<elementi.length; r++){ for(int c=0; c<elementi.length; c++){ System.out.print(elementi[r][c] + "\t"); } System.out.println(); } for(int i=0; i<3; i++){ System.out.println(); } } /** * Avvio del programma * @param argv un array di stringhe passato dall'OS all'avvio del metodo */ public static void main(String argv[]){ Pippo p=new Pippo(); //creo un oggetto della classe Pippo p.caricaElementiCasuali(); //riempio la matrice di numeri casuali da 0 a 9 p.stampa(); //stampo il contenuto della matrice p.salva(); //salvo la matrice p.svuota(); // svuoto la matrice riempiendola di -1 p.stampa(); //stampo la matrice attualmente vuota p.caricaElementiCasuali(); //riempio la matrice di nuovi numeri casuali da 0 a 9 p.stampa(); //stampo gli elementi precedentemente caricati p.carica(); //carico gli elementi in precedenza salvati p.stampa(); //stampo gli elementi appena caricati dal disco //Si controlli se la prima matrice stampata è uguale all'ultima } }
Non è proprio così... se sai che cosa stai andando a leggere non importa.Originariamente inviato da Naruto 92
purtroppo bisogna scorrersi gli elementi ad uno ad uno
il che in output dovrebbe darticodice:import java.io.*; /** * * @author Andrea */ public class SerializationTest implements Serializable { private File file; private Object obj; private static final String DEFAULT_PATH = "C:/Users/Andrea/Desktop/serialize.dat"; public SerializationTest (Object obj) { this(DEFAULT_PATH, obj); } public SerializationTest (String path, Object obj) { this.file = new File(path); this.obj = obj; } public void save() { try { FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.flush(); oos.close(); } catch (Exception e) { e.printStackTrace(); } } public Object read() { Object obj = null; try { FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis); obj = ois.readObject(); ois.close(); } catch (Exception e) { e.printStackTrace(); } return obj; } public static void main (String[] args) { int[][] a = new int[][] { {1, 2, 3}, {4, 5, 6}, }; SerializationTest test = new SerializationTest(a); test.save(); System.out.println("Salvato"); int[][] b = (int[][])test.read(); System.out.println("Letto. Proviamo a modificare"); b[1][1] *= 5; //Stampiamo for (int i = 0; i < b.length; i++) { System.out.print("[ "); for (int j = 0; j < b[0].length; j++) { System.out.print(b[i][j] + " "); } System.out.println("]"); } } }
L'assunto è però che tu sappia che cosa tu stia leggendo, altrimenti il cast fallisce miseramente.codice:Salvato Letto. Proviamo a modificare [ 1 2 3 ] [ 4 25 6 ]
<´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
"The answer to your question is: welcome to tomorrow"
si, ma devi sapere cosa leggere appunto
per il problema del cast, converrebbe applicare il polimorfismo usando come dati degli Object che contengono degli Integer
non so se mi sn spiegato