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();
}
}
}
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();
}
}
}
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.
Kyllä toi lue ja kirjoita koodi tomii ihan ok. Jos homma ei toimi, niin ongelma on jossin muualla koodissa.