Avatar billede nanders Nybegynder
10. oktober 2003 - 17:47 Der er 28 kommentarer og
1 løsning

FileOutputStream , API

Kære eksperter,

Jeg har et javaprogram med en constuctor og en metode.

Jeg ønsker at bruge FileOutputStream til at skrive tal (doubles) fra min metode til en fil.

http://java.sun.com/j2se/1.4.2/docs/api/

ses constructor details og metoder i FileOutputStream.

Jeg har importeret (import java.io.*;) i toppen af mit program.

Hvordan instantierer (?) jeg FileOutputStream i min constructor, eller som en felt variabel, så jeg med denne kan tilgå de metoder, der findes i FileOutputStream.

Jeg har prøvet med:

FileOutputStream f = new FileOutputStream(File c:\test);

i min constructor, men den mangler et ) siger den.

Mit mål er, i min metode, at kunne skrive f.eks.

f.write(x) , hvor x er min double.

I API'en kan jeg imidlertid kun se, at den tager int og byte.

Det er helt centralt for mit program at jeg kan skrive ud i noget andet end et terminalvindue.

// nanders
Avatar billede arne_v Ekspert
10. oktober 2003 - 17:50 #1
1)

Brug:

FileOutputStream f = new FileOutputStream(File c:\\test);

eller:

FileOutputStream f = new FileOutputStream(File c:/test);
Avatar billede arne_v Ekspert
10. oktober 2003 - 17:52 #2
2)

Lav en:

PrintStream ps = new PrintStream(f);

fordi en PrintStream har en masse praktiske metoder.
Avatar billede arne_v Ekspert
10. oktober 2003 - 17:52 #3
re 2 er under forudsætning at du vil skrive din double ud som læsbar tekst og
ikke binært.
Avatar billede arne_v Ekspert
10. oktober 2003 - 17:53 #4
Har jeg ikke forklaret noget om det i et andet spørgsmål ?
Avatar billede nanders Nybegynder
10. oktober 2003 - 17:58 #5
Hej Arne
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:01 #6
Hej Arne,

Begge dine forslag i 1) giver fejlmeddelelsen:

')' expected

Samme fejl fås hvis 2) står nedenunder.

Jeg har prøvet kombinationerne både i og udenfor constructoren.

Jo, du har hjulpet med noget lignende før (igår), men det lykkedes ikke.
Jeg vil naturligvis give dig pointsene i begge tråde hvis det kommmer op og køre.
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:02 #7
Jeg har snork sover - det er naturligvis:

FileOutputStream f = new FileOutputStream("c:\\test");

eller:

FileOutputStream f = new FileOutputStream("c:/test");
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:03 #8
Og du skal noh have:

private FileOutputStream f;

udenfor metoder og så:

f = ...;

i constructoren.

Fordi så kan du bruge f i alle metoder.
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:09 #9
Hej Arne

public class ModelJava110
    {
        private FileOutputStream f;
       
        public ModelJava110()
        {
        FileOutputStream f = new FileOutputStream("c:/test");
        }
        public void Method()

siger fileNotFound

men det er vel at lave en mappe med navnet test i c: ?
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:11 #10
Har lavet både en textfil c:test og en mappe c:\test - men det funker ikke
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:13 #11
Nej - fejlen skyldes at der netop er en directory test
og derfor kan du ikke lave en fil med samme navn.

"c:/test.dat"

eller:

"c:/test/test.dat"
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:14 #12
Hvad skal jeg så gøre ?
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:15 #13
Bruge et af de 2 forslag ( det sidste forudsætter at directory test eksisterer).
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:18 #14
Jeg har nu lavet både C:test.dat og c:/test/test.dat ude i mit directory og tilføjet

PrintStream ps = new PrintStream(f); under
FileOutputStream f = new FileOutputStream("c:/test/test.dat");

i min constructor og får stadig samme fejl
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:22 #15
PrintStream skal naturligvis være efter FileOutputStream ...
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:25 #16
Hej Arne

Det er det også:

private FileOutputStream f;
       
        public ModelJava110()
        {
        FileOutputStream f = new FileOutputStream("c:/test/test.dat");
        PrintStream ps = new PrintStream(f);
        }
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:29 #17
Nu kan jeg lige huske noget fra det andet spørgsmål.

Er det en runtime exception når du kører programmet eller en
compile fejl ?
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:31 #18
Det må være en compile fejl.

Prøv så med:

private FileOutputStream f;
private PrintStream ps;

        public ModelJava110() throws Exception
        {
        f = new FileOutputStream("c:/test/test.dat");
        ps = new PrintStream(f);
        }
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:31 #19
Og du skal så også have en throws Exception på den metode (formentlig main) som
kalder ModelJava110.
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:37 #20
mport java.util.*;
import java.io.*;

public class ModelJava110 { throws Exception
   
        private FileOutputStream f;
       
        public ModelJava110() {
        FileOutputStream f = new FileOutputStream("c:/test/");
        PrintStream ps = new PrintStream(f);
        }

        public void Method() {
           
Siger illegal start of type for main-delen - Hvis { sætter på den anden side af throws exception siger den, at den mangler et }
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:40 #21
Du har sat throws Exception det forkerte sted - den skal på metoden ikke på klassen.
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:43 #22
Hej Arne,

NU kører den fandme - nul kompilefejl
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:46 #23
Men hvis ikke throws Exception er på constructoren siger den fejl

Hvis jeg nu skal skrive til en konkret fil, hvad da ?
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:47 #24
new FileOutputStream("c:/test/vigtigedata.fil");
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:47 #25
Bare angiv filnavnet.
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:50 #26
Hvis jeg nu skal skrive min vilkårlige variabel fra programmet H_1 ud, hvad så ?
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:52 #27
public class ModelJava110 {
  private FileOutputStream f;
  private PrintStream ps;
  public ModelJava110() throws Exception {
        f = new FileOutputStream("c:/test/fil.dat");
        ps = new PrintStream(f);
  }
  public void Method() {
      ps.println(H_1);
  }
}

bemærk at jeg har ændret lidt på nogle ting.
Avatar billede nanders Nybegynder
10. oktober 2003 - 18:57 #28
Hej Arne,

Det virkede. Mange mange tak for hjælpen.

Du har virkelig været "Man of the Day"

Hvis du ikke allerede har fået dine point - send et svar igen
Avatar billede arne_v Ekspert
10. oktober 2003 - 18:59 #29
Jeg har fået point !
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