ObjectOutputStream
og ObjectInputStream
ved
overføring til og fra fil.
JFileChooser
.
Hver gang det er valgt en fil, skal den nevnte opptelling foretas og antallene
skrives ut, for eksempel i tekstfelter. Dersom valgt fil ikke finnes, må det
skrives ut passende feilmelding. Som skille mellom de enkelte ord kan du bruke
det som kalles whitespace.
RandomAccessFile
, slik at den kan oppdateres hver gang det blir
foretatt en telling.)
En vanlig oppgave å utføre for et filbehandlingsprogram er oppdatering av en fil på grunnlag av data som er registrert i en annen fil. Rent konkret tenker vi oss at et firma har en fil som inneholder kundeopplysninger. I praksis kan det være mange typer av opplysninger som ønskes registrert, men for å begrense denne oppgaven skal vi anta at det for hver kunde bare dreier seg om kontonummer, navn og balanse (positiv eller negativ).
I en transaksjonsfil er det registrert opplysninger om firmaets salg for en bestemt periode. I denne fil inneholder postene bare kontonummer og beløp. (Vi kan tenke oss at positive beløp representerer salg, mens negative beløp representerer betaling for tidligere salg.) Transaksjonsfila trenger ikke inneholde alle kontonumre som finnes i kundefila. For det kan tenkes å være kunder som det ikke er solgt noe til i den perioden transaksjonsfila gjelder for. På den annen side kan det i transaksjonsfila forekomme kontonumre som ikke står i kundefila, for det kan ha kommet til nye kunder som det ikke finnes data for i kundefila ennå.
Vi skal anta at kontonumrene i begge filene står i voksende rekkefølge.
Du får i oppgave å skrive et program som leser en kundefil og en transaksjonsfil. Balansen i kundefilpostene skal oppdateres ved at beløpene i transaksjonsfila (for samme kontonummer) adderes til den eksisterende balansen. Oppdaterte kundeposter skrives til en ny fil. Kundeposter som det ikke finnes matchende kontonummer for i transaksjonsfila, skal skrives over til den nye fila som de er. For poster i transaksjonsfila som det ikke finnes matchende kontonummer for i kundefila, må det opprettes nye kundeposter i den nye kundefila. Bruk da "Ukjent" som navn.
Test programmet på filer med følgende innhold:
Gammel kundefil:
Kontonr. | Navn | Balanse |
---|---|---|
100 | Alfred Snippen | 348.17 |
300 | Marta Sande | 27.19 |
500 | Sylfest Sinjarheim | 0.00 |
700 | Sara Solfjell | -14.22 |
Transaksjonsfil:
Kontonr. | Transaksjonsbeløp |
---|---|
100 | 27.14 |
300 | 62.11 |
400 | 100.56 |
900 | 82.17 |
Den gamle kundefila, med navn gammelmast.dta, kan du laste ned ved å klikke her. Transaksjonsfila, med navn trans.dta, finner du her. Begge filer er skrevet som en DataOutputStream. (Vil du ikke bruke disse, må du opprette dine egne filer til å teste programmet med.) Også i den nye kundefila skal kontonumrene stå i stigende rekkefølge. Programmet skal kunne vise på skjermen innholdet i de forskjellige filene.
Strukturmessig kan det i programmet være fornuftig bl.a. å definere to klasser som hver representerer en post i henholdsvis kundefila og transaksjonsfila. I tillegg til datafelter av de typer som finnes i en post i vedkommende fil, kan det i klassen være en metode som leser inn en post fra fila og gir verdier til datafeltene på grunnlag av det som ble lest. For klassen som representerer en post i kundefila vil det også være behov for en metode som skriver ut datafeltenes verdier som en post i den nye kundefila.
public String konverter( String navn ) { ... }Metoden skal virke på den måten at når parameteren navn er et navn skrevet med bare store bokstaver, så skal metoden returnere det samme navnet skrevet med store forbokstaver og ellers små bokstaver. F.eks. skal navnet WOLFGANG AMADEUS MOZART konverteres til Wolfgang Amadeus Mozart. For øvrig skal metoden ikke foreta noen endring av navnet. Pass på at metoden også behandler bindestrek riktig, slik at f.eks. ANKER-NILSEN blir konvertert til Anker-Nilsen. (I eldre tekstfiler var det vanlig at all tekst ble skrevet med bare store bokstaver. Det skal ikke foretas noen lesing av fil i denne oppgaven, men metoden du skal lage kunne være til nytte når en navnefil av den nevnte type skulle leses og konverteres til store og små bokstaver.) Test metoden din ved at du lager et program der du kan skrive inn navn skrevet med bare store bokstaver. Hvert innlest navn skal konverteres og skrives ut igjen i et tekstområde. Skjermbildet kan se ut omtrent som vist nedenfor.