Avatar billede shadowdance Nybegynder
09. september 2004 - 11:36 Der er 9 kommentarer og
2 løsninger

Mærkelig fejl

Betragt følgende kode:

import java.io.*;

public class Control
{
    public static void main(String[] args)
    {
        InformationStream is = new InformationStream();

        is.writeToFile("c:\\fors.txt","Hejsa!");
    }
}

-----------------------------------
import java.io.*;

public class InformationStream
{

    public void writeToFile(String filename, String line) throws IOException
    {
        PrintWriter ud = new PrintWriter(new FileWriter(filename));
        ud.println("");
        ud.close();
    }
}
-------------------------------------

Hvis jeg compiler, får jeg fejlkode: Control.java:9: unreported exception java.io.IOException; must be caught or declared to be thrown
        is.writeToFile("c:\\fors.txt","Hejsa!");

Hvis jeg indsætter "try...catch" compiler den ok, men skriver ikke noget i tekstfilen.

Er der nogen der har en idé?
Avatar billede arne_v Ekspert
09. september 2004 - 11:39 #1
Skal

ud.println("");

ikke være

ud.println(line);

?
Avatar billede europe Nybegynder
09. september 2004 - 11:39 #2
Prøv med - din ud.print() skriver ikke noget i file ("").
-----------------------------------------------------------
import java.io.*;

public class InformationStream
{

    public void writeToFile(String filename, String line) throws IOException
    {
        PrintWriter ud = new PrintWriter(new FileWriter(filename));
        ud.println(line);
        ud.close();
    }
}
-------------------------------------
Avatar billede arne_v Ekspert
09. september 2004 - 11:39 #3
Og du skal enten bruge try catch eller angive at main throws IOException.
Avatar billede 2c Nybegynder
09. september 2004 - 12:32 #4
Som arne_V siger, du skal altid fange exceptions i java.


import java.io.*;

public class Control
{
    public static void main(String[] args)
    {
        InformationStream is = new InformationStream();
        try{
            is.writeToFile("c:\\fors.txt","Hejsa!");
        }
        catch ( IOException e )
        {}
    }
}

class InformationStream
{
    public void writeToFile(String filename, String line) throws IOException
    {
        PrintWriter ud = new PrintWriter(new FileWriter(filename));
        ud.println("");
        ud.close();
    }
}
Avatar billede 2c Nybegynder
09. september 2004 - 12:33 #5
Øh, ok. Jeg havde ikke lige læst hele spørgsmålet :(
Avatar billede arne_v Ekspert
09. september 2004 - 12:48 #6
forudsat at "" -> line var løsningen så ligger jeg også et svar
Avatar billede shadowdance Nybegynder
09. september 2004 - 15:26 #7
Fantastisk. Det virker! Nu forstår jeg også hvad der ligger i ordet throws - det er bare noget mærkeligt noget, at compileren tager højde for en fejl, der KAN hænde... men ok, jeg klager ikke.

Hvad så hvis jeg vil have min writeToFile til at append´e?
Avatar billede arne_v Ekspert
09. september 2004 - 16:22 #8
Det er en feature i Java at man erklærer metoder til at de kan smide
en exception således at den programmør der bruger metoden bliver tvunget
til at tage stilling til fejl situationer. Vil man catche eller sende
videre ?
Avatar billede arne_v Ekspert
09. september 2004 - 16:23 #9
PrintWriter ud = new PrintWriter(new FileWriter(filename, true));

vil appende til eksisterende fil.
Avatar billede rasmusbg Nybegynder
09. september 2004 - 16:44 #10
Arne - Det er da kun checked exceptions, man skal tage stilling til (eller husker jeg forkert?)
Avatar billede arne_v Ekspert
09. september 2004 - 19:59 #11
Du husker rigtigt. Exceptions som extender RuntimeException skal ikke
håndteres men kan håndteres (og de kaldes så unchecked exceptions).
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester