/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
læse tekstfil
Fra : sune vuorela


Dato : 11-12-03 01:42

Hjesa!

Jeg har gang i at forsøge at læse en tekstfil med java. Det går også
meget godt - bortset fra når jeg når til slutningen af filen. Så får
jeg NullPointerException

Jeg synes at jeg havde læst at når man nåede til enden af en tekstfil,
så var strengen null, sådan at man bare kunne teste hver linje, men
det virker ikke hos mig.

Jeg får pænt og nydeligt skrevet samtlige linjer af min tekstfil ud på
skærmen, sådan som mine debug-linjer også burde gøre. Fjelen kommer
først erter sidste linje er skrevet ud.

Jeg har inkluderet den del af koden som (jeg tror) er væsentlig:

jeg har markeret der hvor fejlen udprintes- og der hvor den henviser
til

public void readFile()
{
   try{
      FileReader fil= new FileReader("ordfil.sgt");
      BufferedReader ind = new BufferedReader(fil);
      String linje = ind.readLine();
      String art = null;
      while (linje != null)
      {
         try
         {   
            while (!linje.equals("") && linje !=
null)
            {
               System.out.println(linje+"
DEBUG 1");//DEBUG
               if(linje.charAt(0)=='[' &&
linje.charAt(linje.length()-1)==']')
               {
                  art =
linje.substring(1,linje.length()-1);

System.out.println(art+" DEBUG2");// DEBUG
               }
               else if(art != null)
               {

System.out.println(art+" DEBUG3");// DEBUG
                  opretOrd(art,linje);
//DENNE FUNKTION FORVENTER TO STRINGS MEN DET ER HER DER ER NOGET GALT
               }
               else
               {
                  //Det der skal gøres
med de ord der står før første kategori.
                  //Det kunne være
forskellige andre data
               }
               linje = ind.readLine();
            }            
         linje = ind.readLine();
         }
         catch (Exception u)
         {
            System.out.println("fjel linje
"); //HER SKRIVES FEJLEN UD
            u.printStackTrace();
         }
      }
   }
   catch(FileNotFoundException u)
   {
      System.out.println("Filen kunne ikke findes");
   }
   catch(Exception u)
   {
      System.out.println("Fjel ved læsning af fil "+u);
   }
}

 
 
Henrik Stidsen (11-12-2003)
Kommentar
Fra : Henrik Stidsen


Dato : 11-12-03 01:46

sune vuorela <nospam@vuorela.dk> wrote in
news:mjeftvgc1lmtpb78iri528n7rifejr0e08@4ax.com

> linje = ind.readLine();
> }
> linje = ind.readLine();
> }
> catch (Exception u)

Hvorfor har du to gange readLine() ? - mon ikke det er der den går
galt ?

--
..: Henrik Stidsen - http://hs235.dk/ - http://hs235.dk/blog/ ::...
"Nogen gange kan ens liv godt føles som et puslespil, hvor brikkerne
bevæger sig og skifter farve og størrelse når man rører dem."
- Emme, http://emme.dk/2003_11_01_arkiv.html#106840650828914899

sune vuorela (11-12-2003)
Kommentar
Fra : sune vuorela


Dato : 11-12-03 02:21

En der kalder sig Henrik Stidsen <nospamforme@hs235.dk> skrev:

>> linje = ind.readLine();
>> }
>> linje = ind.readLine();
>> }
>> catch (Exception u)
>
>Hvorfor har du to gange readLine() ? - mon ikke det er der den går
>galt ?

Jeg har:

while (linje != null)
{
   while (!linje.equals("") && linje != null)
   {
       ind.readLine();
   }            
   linje = ind.readLine();
}

Hvis jeg sletter den inderste, så får jeg en uendelig løkke ved første
gennemløb.

Hvis jeg sletter den anden, så far jeg en uendelig løkke i tilfælde af
tom linje.

Måske skulle man lave den inderste while-løkke om til en if - og så
slette den inderste readline...

Det må prøves...

.... det er prøvet... og det var det der skulle til.


--
Sune

Kristian Rasmussen (19-12-2003)
Kommentar
Fra : Kristian Rasmussen


Dato : 19-12-03 17:52


"sune vuorela" <nospam@vuorela.dk> skrev i en meddelelse
news:s5hftvofhonpkoegfrclev3bp2dopj4846@4ax.com...

> while (linje != null)
> {
> while (!linje.equals("") && linje != null)
> {
> ind.readLine();
> }
> linje = ind.readLine();
> }
> Måske skulle man lave den inderste while-løkke om til en if - og så
> slette den inderste readline...
>
> Det må prøves...
>
> ... det er prøvet... og det var det der skulle til.

En mere elegant løsning ville være at bytte rundt på dine boolske udtryk i
while loopet.

while (!linje.equals("") && linje != null) // Vil altid give en nullpointer
exception når der ikke er mere i din bufferedreader.
Vend dig til at bruge den her istedet:

!"".equals(linje) // Her får du ikke nogen nullpointer da "" aldrig er null

Hvis du vil undgå at læse fra bufferedreader før du når ned i loopet så brug
den her konstruktion:

String linje = null;
while ( (linje = ind.readLine()) != null && !"".equals(linje)) // Her får du
ikke nogen nullpointer da "" aldrig er null
System.out.println(linje);

--
hilsen Kristian
http://www.krconsulting.dk



Kristian Thy (19-12-2003)
Kommentar
Fra : Kristian Thy


Dato : 19-12-03 23:02

Kristian Rasmussen uttered:
> String linje = null;
> while ( (linje = ind.readLine()) != null && !"".equals(linje))
> //Her får du ikke nogen nullpointer da "" aldrig er null

Hvorfor skulle det være nødvendigt med !"".equals(linje)? Java kører
jo med lazy evaluation, så den når aldrig forbi && når der ikke er
mere at læse...

\\kristian
--
A: Top posters
Q: What's the most annoying thing on Usenet?

Kristian Rasmussen (20-12-2003)
Kommentar
Fra : Kristian Rasmussen


Dato : 20-12-03 17:18

"Kristian Thy" <thy@it.edu> skrev i en meddelelse
news:brvshi$7klka$2@ID-157676.news.uni-berlin.de...
> > while ( (linje = ind.readLine()) != null && !"".equals(linje))
> Hvorfor skulle det være nødvendigt med !"".equals(linje)? Java kører
> jo med lazy evaluation, så den når aldrig forbi && når der ikke er
> mere at læse...

Du har helt ret. Lidt kopi/paste der :p


--
hilsen Kristian
http://www.krconsulting.dk



Søg
Reklame
Statistik
Spørgsmål : 177580
Tips : 31968
Nyheder : 719565
Indlæg : 6409083
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste