Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9

    [JAVA] Scrittura e lettura file .dat

    Salve a tutti.
    Sono uno studente universitario che ha iniziato da un mese a programmare in java, quindi chiedo in anticipo scusa se le mie domande saranno stupide, ma già fatto ricerche e non ho trovato risposte.

    Sto cercando di scrivere un programma che scriva un file .dat che contenga diversi valori disposti su righe diverse (nel mio caso è un mazzo di carte che quindi contiene valori in successione) e successivamente vorrei leggere tali valori e stamparli a schermo.

    Es.
    codice:
    1
    bastoni
    2
    bastoni
    3
    bastoni
    ...
    1
    spade
    ...
    Il mio problema si presenta proprio in questa seconda fase, in quanto ho provato con l'utilizzo del metodo readObject() ma dopo diversi tentativi sono riuscito a stampare solamente un 10.
    Cosa mi consigliate di utilizzare?

    Al momento ho il codice sul computer della scuola, quindi appena riuscirò a recuperarlo lo posterò qua.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Scrittura e lettura file .dat

    Originariamente inviato da Trevo92
    Sto cercando di scrivere un programma che scriva un file .dat che contenga diversi valori disposti su righe diverse

    Il mio problema si presenta proprio in questa seconda fase, in quanto ho provato con l'utilizzo del metodo readObject()
    Questo readObject si riferisce di certo a ObjectInputStream ma devi sapere che la coppia ObjectInputStream/ObjectOutputStream è dedicata principalmente alla "serializzazione" degli oggetti, che è una cosa molto ben diversa dal gestire un semplice e banale file di "testo".

    Se vuoi scrivere file di testo, formati cioè da caratteri, ti servono le sotto-classi di Reader e Writer. Ma dovresti anche avere chiara quale è la filosofia che sta dientro al package java.io.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9
    Ti ringrazio per la risposta.
    Al momento sto riguardando tutto passo per passo ed effettivamente mi sarebbe molto più comodo usare un normale file di testo, ma questo programma mi serve per scuola e mi è stato chiesto esplicitamente di utilizzare un file .dat.

    Per scrivere il file con le relative carte ho usato questo pezzo di codice
    codice:
    [...]
    try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("mazzocarte.dat")) ){
    for (int i=0; i < 4; i++) {
    for (int j=0; j < 10; j++) {       
    out.writeInt(j+1);
    
    if (i==0) 
    out.writeChars("Bastoni");
    else if (i==1)
    out.writeChars("Coppe");
    else if (i==2)
    out.writeChars("Denari");
    else if (i==3)
    out.writeChars("Spade");
    }
    }
    [...]
    Il file viene creato, ma non essendo certo del suo contenuto volevo testarlo con ObjectInputStream, ma appunto non so come approcciarmi.
    Se c'è una soluzione alternativa accetterò volentieri consigli, però mi serve utilizzare sempre e comunque un file .dat che contenga i valori formattati come descritto nel post precedente.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Trevo92
    mi è stato chiesto esplicitamente di utilizzare un file .dat.
    Dire file ".dat" non vuol dire nulla di preciso. Semplicemente .dat se ne deduce = "file di dati".
    Ma cosa ci sia nel file e con quale formato ..... è tutto da precisare e stabilire.

    Originariamente inviato da Trevo92
    però mi serve utilizzare sempre e comunque un file .dat che contenga i valori formattati come descritto nel post precedente.
    Da quanto hai detto nel post iniziale ovvero "valori disposti su righe diverse" se ne dedurrebbe che file binario NON è ma bensì un banale file di testo.
    E tu invece stai continuando a perseverare sulla strada di ObjectOutputStream che si usa di norma per la serializzazione degli oggetti (tutta un'altra cosa).


    Ripeto che .dat non vuol dire nulla di preciso. Potrebbe essere un file di testo o un file binario e per entrambe le possibilità bisognerebbe comunque precisare bene struttura e logica del contenuto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9
    D'accordo, scusami per la noobiaggine.
    Posto la consegna dell'esercizio che devo svolgere:
    codice:
    Creare un programma in grado di mescolare un mazzo di carte.
    Il mazzo di carte è salvato in un file mazzocarte.dat. All'interno del file, per ogni carta
    vengono memorizzati il valore della carta (tramite un numero intero) e il seme della carta
    (tramite una parola), su righe separate. Se il mazzo è composto da n carte, il file sarà
    quindi composto da 2n righe.
    Si crei una classe Carta che permetta di memorizzare le informazioni relative ad una singola
    carta da gioco.
    Si crei poi una classe MescolatoreCarte, che legge il file mazzocarte.dat, carica le carte
    presenti nel file in memoria, e crea una permutazione casuale dell'ordine delle carte
    (mescola il mazzo di carte). Tale permutazione viene salvata in un file
    mazzomescolato.dat.
    
    Esempio mazzocarte.dat
    1
    bastoni
    2
    bastoni
    3
    bastoni
    1
    coppe
    2
    coppe
    3
    coppe
    1
    denari
    2
    denari
    3
    denari
    1
    spade
    2
    spade
    3
    spade
    Abbandono la strada dell'ObjectOutput/InputStream e aspetto consigli.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Trevo92
    per ogni carta vengono memorizzati il valore della carta (tramite un numero intero) e il seme della carta (tramite una parola), su righe separate.
    Il testo mi pare inequivocabile ... parla di "righe". Quindi è un normale file di testo, che potresti poi anche visualizzare/editare con un qualunque editor (notepad o altro).

    Quindi per trattare "caratteri" servono appunto le sotto-classi di Reader e Writer. Ma come dicevo prima, dovresti capire come è fatto il package java.io. E non è una cosa che posso spiegare in poche parole.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9
    Ti ringrazio, hai già fatto tanto, ora mi tocca metterci del mio.
    Mi riservo di postare ulteriori domande solo dopo che mi sarò riguardato bene le sotto-classi writer e reader se avrò altri dubbi.
    Grazie ancora

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.