Gå til innhold

Java, lese frå fil. Import klasse feil?


Anbefalte innlegg

Eg har eit problem med å få kjørt detta programmet.

 

Kompileringa går fint men kjøringa ender med feilmeldinger.

 

C:\java>java Filskriving

Exception in thread "main" java.lang.NumberFormatException: For input string: "3

;"

at java.lang.NumberFormatException.forInputString(NumberFormatException.

java:48)

at java.lang.Integer.parseInt(Integer.java:456)

at java.lang.Integer.parseInt(Integer.java:497)

at Filskriving.main(Filskriving.java:34)

 

Kildekoden og fila som blir lest lastes ned her

http://213.167.99.110/kundedata.zip

 

For dei som kan finna ut av det ved å bare sjå på koden så legger eg det bare ut her

import java.util.*;

import java.io.*;

 

public class Filskriving{

public static void main(String[] args) {

 

  HashMap data = new HashMap();

  FileReader fileReader = null;

 

      try {

          // create reader for the file

          fileReader = new FileReader("c:\\kundedata.txt");

      } catch (FileNotFoundException e) {

          System.out.println("File: " + "kundedata.txt" + " was not found.");

                  }

 

           

 

      // buffered reader allowing reading line by line

      // instead of dealing with byte-buffers directly.

      BufferedReader bufferedReader = new BufferedReader(fileReader);

 

      try {

          String line = bufferedReader.readLine();

 

          while( line != null ) {

              // split the line into sections

              // FIXME: not sure if this leaves "; " in the String

              String[] argsbuffer = line.split("; ");

 

              String name = argsbuffer[0];

              String address = argsbuffer[1];

              boolean blocked = Boolean.getBoolean(argsbuffer[2]);

              int warnings = Integer.parseInt(argsbuffer[3]);

 

              // FIXME: Add data to wanted structure

              data.put( name, new Kontoer (name, address, blocked, warnings));

 

              // read next line of data

              line = bufferedReader.readLine();

          }

      } catch ( IOException e ) {

          System.out.println("Error reading from file: " + "kundedata.txt");

          e.printStackTrace();

      } finally {

          try {

              // close the readers.

              fileReader.close();

              bufferedReader.close();

          } catch (IOException e) {

              // may not be a big deal.

          }

      }

    Iterator it = data.values().iterator();

    while (it.hasNext()) {

  try{

    Kontoer k = (Kontoer) it.next();

    k.pdata();

  }catch (Exception e) {

      }

}

}

}

 

class Kontoer{

int warnings;

String name, address;

boolean blocked;

 

    Kontoer(String name, String address, boolean blocked, int warnings) {

          this.name = name;

          this.address = address;

          this.blocked = blocked;

          this.warnings = warnings;

      }

   

    Kontoer(){

   

    }

   

    void pdata() {

System.out.println(name);

System.out.println(address);

System.out.println(blocked);

System.out.println(warnings);

}

}

Lenke til kommentar
Videoannonse
Annonse

Du maa gjoere foelgende endringer:

 

String[] argsbuffer = line.split("; ");

 

til

 

String[] argsbuffer = line.split("; ");
argsbuffer[argsbuffer.length-1] = argsbuffer[argsbuffer.length-1].replace(";","");

 

";" fjernes ikke ved slutten av hver linje, og du maa gjoere dette selv.

Lenke til kommentar
Har litt problemer med den eine linja mi,

 

boolean blocked = Boolean.getBoolean(argsbuffer[2]);

 

variabelen blocked får ikkje true verdi mens argsbuffer[2] får lest true, kan det skyldes whitespace?

kan skyldes whitespace ja...

 

argsbuffer[2].trim() skulle løse det:

 

boolean blocked = Boolean.getBoolean(argsbuffer[2].trim());

Lenke til kommentar

Boolean.getBoolean(String) er til tider litt brysom.

 

Prøv:

boolean blocked = new Boolean(argsbuffer[2].trim()).booleanValue();

Hvis det fremdeles ikke fungerer, saa burde denne ad-hoc løsningen ta knekken:

boolean blocked = argsbuffer[2].toLowerCase().indexOf("true") >= 0;

Lenke til kommentar

static boolean  getBoolean(String name)
         Returns true if and only if the system property named by the argument exists and is equal to the string "true".

 

"True" og "TRUE" returnerer false. Dessuten har jeg alltid hatt litt problemer med dette kallet (stoler ikke på system property helt), og new Boolean(value).booleanValue() har alltid fungert for meg.

Lenke til kommentar

Eg veit eg maser skikkeleg, men det dukker opp feil eg sliter virkeleg med å finna ut av.

 

Nå har eg problemer med å lesa frå ein av filene

 

try {

          String line = bufferedReader.readLine();

 

          while( line != null ) {

              String[] argsbuffer2 = line.split("; ");

    argsbuffer2[argsbuffer2.length-1] = argsbuffer2[argsbuffer2.length-1].replace(";","");

 

              String name = argsbuffer2[0];

              String address = argsbuffer2[1];

              boolean blocked = new Boolean(argsbuffer2[2].trim()).booleanValue();

              int warnings = Integer.parseInt(argsbuffer2[3]);

              int kredittramme = Integer.parseInt(argsbuffer2[4]);

              int rabatt = Integer.parseInt(argsbuffer2[5]);

              int kontonr = Integer.parseInt(argsbuffer2[6]);

 

              kunder.put(kontonr, new Bkunder(name, address, warnings, blocked, kredittramme, rabatt, kontonr));

              line = bufferedReader.readLine();

          }

      } catch ( IOException e ) {

          System.out.println("Error reading from file: " + "bkundedata.txt");

          e.printStackTrace();

}

 

Feilmeldinga eg får når eg kjører programmet er

 

Error reading from file: bkundedata.txt

java.io.IOException: Stream closed

        at java.io.BufferedReader.ensureOpen(BufferedReader.java:97)

        at java.io.BufferedReader.readLine(BufferedReader.java:293)

        at java.io.BufferedReader.readLine(BufferedReader.java:362)

        at Meny.startmeny(Videoutleie.java:72)

        at Videoutleie.main(Videoutleie.java:10)

 

Og sånn er fila som den leser ifrå

 

Olav Gjerde; Oddernesveien 17; false; 0; 1000; 20; 11;

Leif Krutt; Krutteg†rden 3; false; 0; 100; 10; 12;

 

Kva som er gale?

Lenke til kommentar

at Meny.startmeny(Videoutleie.java:72)

 

Her er noe muffens. Du bruker sannsynligvis bufferedReader etter at den er lukket. Kan ikke si noe mer. Du maa legge ut all koden paa nytt inkludert Meny-klassen, og kommentere linjen som skaper bry (linje 72 i Videoutleie.java)

Endret av Patton
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...