Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    1

    Array bidimensionali su file

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123

    Re: Array bidimensionali su file

    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
    No. Devi scorrerlo, sta a te scegliere come! (se per caso dovesse esistere un modo smentitemi pure).

    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.

  3. #3
    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
        }
    }

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Originariamente inviato da Naruto 92
    purtroppo bisogna scorrersi gli elementi ad uno ad uno
    Non è proprio così... se sai che cosa stai andando a leggere non importa.
    codice:
    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("]");
            }
        }
    }
    il che in output dovrebbe darti
    codice:
    Salvato
    Letto. Proviamo a modificare
    [ 1 2 3 ]
    [ 4 25 6 ]
    L'assunto è però che tu sappia che cosa tu stia leggendo, altrimenti il cast fallisce miseramente.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.