FileInputSream

Minulla on rekisteri, joka on toteutettu neljän luokan avulla, kaytto, pääohjelma, jossa on valikko käyttäjälle, varsinainen tietorakenneluokka(implements Serializable) ja Lue-luokka. Kaytto-luokan KirjoitaTiedostoon ja lueTiedostosta ovat ongelma. Käännös menee läpi, mutta lueTiedostosta ei onnistu. Mikä mättää?
koodia alla

import java.io.*;
import java.util.*;


class Kaytto
{
static String shenkiloNro;
static HashMap rekisteri = new HashMap();

public static void lisaa()
{
SairaanKuljettaja uusiSairKu;
System.out.println("Syötä henkilönumero");
String shenkiloNro = Lue.rivi();

System.out.println("Syötä uuden sairaankuljettajan nimi");
String sNimi = Lue.rivi();

System.out.println("Syötä uuden sairaankuljettajan henkilötunnus");
String sHenkilotunnus = Lue.rivi();

   -----
jne….

   -------

uusiSairKu = new SairaanKuljettaja(shenkiloNro, sNimi, sHenkilotunnus,
sAmmattitutkinto, sToimenpideoikeudet,
sValmistumisvuosi,
sEraantuminen);
rekisteri.put(shenkiloNro, uusiSairKu);
}


//Metodi poistaa annetun sairaankuljettajan tiedot.

public static void poistaTieto()
{
System.out.println(
"Syötä poistettavan sairaankuljettajan henkilönumero");
String shenkiloNro = Lue.rivi();
rekisteri.remove(shenkiloNro);
}



//Metodi tulostaa pyydetyn sairaakuljettajan tiedot.

public static void etsiTiedot()
{
System.out.println(
"Syötä tulostettavan sairaankuljettajan henkilönumero");
String shenkiloNro = Lue.rivi();
System.out.println("--");
System.out.println(rekisteri.get(shenkiloNro));
System.out.println("--");
}

//Metodi tulostaa rekisterissä olevien sairaankuljettajien tiedot.

public static void kaikkiTiedot()
{

System.out.println("--");
Set entrySet = rekisteri.entrySet();
Iterator entryIterator = entrySet.iterator();

while (entryIterator.hasNext());
{
Map.Entry e = (Map.Entry)entryIterator.next();
System.out.println(e.getKey() "=" e.getValue());
}
}

//Metodi lukee sairaankuljettajaolion tiedostosta.


public static void lueTiedostosta() {
try {
FileInputStream fisHashMap = new FileInputStream("map.bin");
ObjectInputStream oisHashMap = new ObjectInputStream(fisHashMap);
rekisteri = (HashMap) oisHashMap.readObject();
oisHashMap.close();
} catch (Exception e) {
e.printStackTrace();
}
}


public static void KirjoitaTiedostoon(){
try {
FileOutputStream fosHashMap = new FileOutputStream("map.bin");
ObjectOutputStream oosHashMap = new ObjectOutputStream(fosHashMap);
oosHashMap.writeObject(rekisteri);
oosHashMap.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
2211
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

Epäilenpä, että tuo lueTiedostosta olisi hiukan väärin ymmärretty. Sieltä tiedostosta pitäisi saada ulos sellainen objekti, joka sinne on tallennettu eli se SairaanKuljettaja-olio.

Jos halutaan tietty Sairaankuljettaja, sitä kai haettaisiin iteroimalla ja vertaamalla. Gurut selvittäkööt tarkemmin. Sellaisia muistikuvia minulla on joltain luennoilta.

Äänestä

Kyllä toi lue ja kirjoita koodi tomii ihan ok. Jos homma ei toimi, niin ongelma on jossin muualla koodissa.

Äänestä

Kommentoi aloitusta


EpaToivonen kirjoitti:

Minulla on rekisteri, joka on toteutettu neljän luokan avulla, kaytto, pääohjelma, jossa on valikko käyttäjälle, varsinainen tietorakenneluokka(implements Serializable) ja Lue-luokka. Kaytto-luokan KirjoitaTiedostoon ja lueTiedostosta ovat ongelma. Käännös menee läpi, mutta lueTiedostosta ei onnistu. Mikä mättää?
koodia alla

import java.io.*;
import java.util.*;


class Kaytto
{
static String shenkiloNro;
static HashMap rekisteri = new HashMap();

public static void lisaa()
{
SairaanKuljettaja uusiSairKu;
System.out.println("Syötä henkilönumero");
String shenkiloNro = Lue.rivi();

System.out.println("Syötä uuden sairaankuljettajan nimi");
String sNimi = Lue.rivi();

System.out.println("Syötä uuden sairaankuljettajan henkilötunnus");
String sHenkilotunnus = Lue.rivi();

   -----
jne….

   -------

uusiSairKu = new SairaanKuljettaja(shenkiloNro, sNimi, sHenkilotunnus,
sAmmattitutkinto, sToimenpideoikeudet,
sValmistumisvuosi,
sEraantuminen);
rekisteri.put(shenkiloNro, uusiSairKu);
}


//Metodi poistaa annetun sairaankuljettajan tiedot.

public static void poistaTieto()
{
System.out.println(
"Syötä poistettavan sairaankuljettajan henkilönumero");
String shenkiloNro = Lue.rivi();
rekisteri.remove(shenkiloNro);
}



//Metodi tulostaa pyydetyn sairaakuljettajan tiedot.

public static void etsiTiedot()
{
System.out.println(
"Syötä tulostettavan sairaankuljettajan henkilönumero");
String shenkiloNro = Lue.rivi();
System.out.println("--");
System.out.println(rekisteri.get(shenkiloNro));
System.out.println("--");
}

//Metodi tulostaa rekisterissä olevien sairaankuljettajien tiedot.

public static void kaikkiTiedot()
{

System.out.println("--");
Set entrySet = rekisteri.entrySet();
Iterator entryIterator = entrySet.iterator();

while (entryIterator.hasNext());
{
Map.Entry e = (Map.Entry)entryIterator.next();
System.out.println(e.getKey() "=" e.getValue());
}
}

//Metodi lukee sairaankuljettajaolion tiedostosta.


public static void lueTiedostosta() {
try {
FileInputStream fisHashMap = new FileInputStream("map.bin");
ObjectInputStream oisHashMap = new ObjectInputStream(fisHashMap);
rekisteri = (HashMap) oisHashMap.readObject();
oisHashMap.close();
} catch (Exception e) {
e.printStackTrace();
}
}


public static void KirjoitaTiedostoon(){
try {
FileOutputStream fosHashMap = new FileOutputStream("map.bin");
ObjectOutputStream oosHashMap = new ObjectOutputStream(fosHashMap);
oosHashMap.writeObject(rekisteri);
oosHashMap.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu