Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [Java]DataStreams

  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    86

    [Java]DataStreams

    Il seguente algoritmo mi da un'eccezione di tipo IO

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.EOFException;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;


    public class DataFile {

    static final String dataFile = "invoicedata";

    static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
    static final int[] units = { 12, 8, 13, 29, 50 };
    static final String[] descs = { "Java T-shirt",
    "Java Mug",
    "Duke Juggling Dolls",
    "Java Pin",
    "Java Key Chain" };

    public static void main(String[] args) {
    try {
    DataOutputStream out = new DataOutputStream(new
    BufferedOutputStream(new FileOutputStream(dataFile)));
    for (int i = 0; i < prices.length; i ++) {
    out.writeDouble(prices[i]);
    out.writeInt(units[i]);
    out.writeUTF(descs[i]);
    }

    DataInputStream in = new DataInputStream(new
    BufferedInputStream(new FileInputStream(dataFile)));
    double price;
    int unit;
    String desc;
    double total = 0.0;
    while (true) {
    price = in.readDouble();
    unit = in.readInt();
    desc = in.readUTF();
    System.out.print("You ordered "+unit+" units of "+desc +" at "+price);
    total += unit * price;
    System.out.println("The total is"+total);
    }

    }
    catch (FileNotFoundException e) {
    System.out.println("DataFile::cattuata eccezione di tipo FileNotFoundException::"+e.toString());
    }
    catch (IOException e) {
    System.out.println("DataFile::cattuata eccezione di tipo EOF::"+e.getMessage());
    e.printStackTrace();
    }
    }

    }

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

    Re: [Java]DataStreams

    Originariamente inviato da valeof
    Il seguente algoritmo mi da un'eccezione di tipo IO
    Innanzitutto, dopo che hai scritto tutti i dati, dovresti chiudere lo stream prima di provare a creare uno stream di input! Ma c'è un'altra questione nella lettura. Fai un ciclo while(true) da cui non esci mai se non per una eccezione.
    Ma come fai a sapere quanti elementi ci sono nel file?? Ci sono diverse soluzioni: all'inizio dello stream potresti scrivere un int che indica quanti elementi ci sono oppure potresti andare avanti a leggere finché non ti becchi EOFException, che non devi considerare come un errore ma come "non ci sono più dati".

    Nota che per "elemento" intendo la tripletta price/unit/desc. Se ho capito bene, questi 3 dati formano un "record". Cosa che concettualmente sarebbe stato meglio rappresentare con una classe.
    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
    Oct 2007
    Messaggi
    86

    Re:

    Grazie andbin,

    Ho chiuso il DataStream ed effettivamente il programma rileva una EOFException
    solo quando non ci sono più elementi

    Grazie e buon Natale

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.