/ 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
Newbie behøver hjælp til 2 spørgsmål!
Fra : Martin Jørgensen


Dato : 29-04-04 16:59

Hej NG.

Jeg har lært mig selv lidt java, men sidder fast i et lille problem. Jeg
mangler en smule rådgivning, derfor dette indlæg. På forhånd mange tak, for
alle svar:

Spørgsmål 1)
------------
Jeg vil gerne have tilføjet nogle data til en fil... Det kan sagtens lade
sig gøre for mig, både at læse og skrive fra en bestemt fil. Men det må
også kunne gøres uden at overskrive filen fra gang til gang. Og det må også
kunne gøres på en nem måde, dvs. uden først at læse hele filen og derefter
tilføje noget og tilsidst skrive det hele igen... Jeg har disse 3 linjer
(men de overskriver filen fra gang til gang):

FileWriter fw = new FileWriter (file);
BufferedWriter bw = new BufferedWriter (fw);
PrintWriter outFile = new PrintWriter (bw);

Hvad skal der stå, hvis jeg bare vil "appende" eller tilføje noget til en
fil, hver gang man f.eks. trykker på en button (implements actionlistener,
eller lignende)?


Spørgsmål 2)
------------
String fil = new String("farve.gem");
FileReader filr = new FileReader (fil);
BufferedReader inFile = new BufferedReader (filr);
String farve = inFile.readLine();
System.out.println (farve);
// Color gemtfarve = Color.black;
convertStringToColor(farve);
// Color gemtfarve = Color.convertStringToColor(java.lang.String farve);
kunde.setBackground(gemtfarve);
left.setBackground(gemtfarve);
inFile.close();

Compileren skriver alt muligt med at cannot resolve symbol, ligemeget
hvordan jeg benytter convertStringToColor... Sagen er den, at jeg har gemt
en fil med flg. tekst (ved at gemme en color-variabel):
java.awt.Color[r=0,g=51,b=51]

Denne tekst er den eneste, der står i filen og indholdet skal omsættes til
en farve af typen Color (farven tillægges til kunde og left-JPanelet).
Hvordan gøres dette?

På forhånd tak for at lede mig på rette vej. Det burde være 2 lette
spørgsmål...?

mvh.
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

 
 
Thomas Bendsen (29-04-2004)
Kommentar
Fra : Thomas Bendsen


Dato : 29-04-04 17:24

In article <4091262a$0$220$edfadb0f@dread12.news.tele.dk>,
Martin Jørgensen <unoder.spam@jay.spam.net> wrote:

> Hej NG.
>
> Jeg har lært mig selv lidt java, men sidder fast i et lille problem. Jeg
> mangler en smule rådgivning, derfor dette indlæg. På forhånd mange tak, for
> alle svar:
>
> Spørgsmål 1)
> ------------
> Jeg vil gerne have tilføjet nogle data til en fil... Det kan sagtens lade
> sig gøre for mig, både at læse og skrive fra en bestemt fil. Men det må
> også kunne gøres uden at overskrive filen fra gang til gang. Og det må også
> kunne gøres på en nem måde, dvs. uden først at læse hele filen og derefter
> tilføje noget og tilsidst skrive det hele igen... Jeg har disse 3 linjer
> (men de overskriver filen fra gang til gang):
>
> FileWriter fw = new FileWriter (file);
> BufferedWriter bw = new BufferedWriter (fw);
> PrintWriter outFile = new PrintWriter (bw);
>
> Hvad skal der stå, hvis jeg bare vil "appende" eller tilføje noget til en
> fil, hver gang man f.eks. trykker på en button (implements actionlistener,
> eller lignende)?
>
Uden at være javaekspert vil jeg gætte på at du skal kigge på noget med
random access. Se Sun tutorial her:
http://java.sun.com/docs/books/tutorial/essential/io/rafs.html

--
MVH
Thomas Bendsen

Martin Jørgensen (29-04-2004)
Kommentar
Fra : Martin Jørgensen


Dato : 29-04-04 18:22

Thomas Bendsen wrote:

> In article <4091262a$0$220$edfadb0f@dread12.news.tele.dk>,
> Martin Jørgensen <unoder.spam@jay.spam.net> wrote:
-snip-
>> Hvad skal der stå, hvis jeg bare vil "appende" eller tilføje noget til en
>> fil, hver gang man f.eks. trykker på en button (implements
>> actionlistener, eller lignende)?
>>
> Uden at være javaekspert vil jeg gætte på at du skal kigge på noget med
> random access. Se Sun tutorial her:
> http://java.sun.com/docs/books/tutorial/essential/io/rafs.html

Øv, tak for hintet, men jeg sidder stadigvæk fast. Det eneste jeg kan finde
ud af, er at blive ved med at overskrive en fil og jeg er sikker på at der
findes en elegantere metode, end at indlæse hele filen i en variabel for
dernæst at lægge en String til + at gemme filen...

Nu forsøgte jeg med (koden er sat ind i actionlistener'en for en MenuItem):

DataOutputStream fos = new DataOutputStream(new
FileOutputStream("output.log"));
fos.writeBytes(new String("HEJ! TESTER LIGE NU!"));
fos.writeByte('\n');
fos.close();

Hvad gør man for at tilføje noget nyt tekst til en fil?

mvh.
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk

Ole Ildsgaard Hougaa~ (29-04-2004)
Kommentar
Fra : Ole Ildsgaard Hougaa~


Dato : 29-04-04 18:25

On Thu, 29 Apr 2004 17:58:38 +0200, Martin Jørgensen
<unoder.spam@jay.spam.net> wrote:

>Hej NG.
>
>Jeg har lært mig selv lidt java, men sidder fast i et lille problem. Jeg
>mangler en smule rådgivning, derfor dette indlæg. På forhånd mange tak, for
>alle svar:

Du kan slå definitionen (javadoc'en) af Javas indbyggede klasser op
her:
http://java.sun.com/j2se/1.4.2/docs/api/
(Indsæt din konkrete version af java i stedet for 1.4.2.) Det er nogle
gange en hjælp. Nu til dine konkrete spørgsmål.

>Spørgsmål 1)
>------------
>Jeg vil gerne have tilføjet nogle data til en fil... Det kan sagtens lade
>sig gøre for mig, både at læse og skrive fra en bestemt fil. Men det må
>også kunne gøres uden at overskrive filen fra gang til gang. Og det må også
>kunne gøres på en nem måde, dvs. uden først at læse hele filen og derefter
>tilføje noget og tilsidst skrive det hele igen... Jeg har disse 3 linjer
>(men de overskriver filen fra gang til gang):
>
> FileWriter fw = new FileWriter (file);
> BufferedWriter bw = new BufferedWriter (fw);
> PrintWriter outFile = new PrintWriter (bw);
>
>Hvad skal der stå, hvis jeg bare vil "appende" eller tilføje noget til en
>fil, hver gang man f.eks. trykker på en button (implements actionlistener,
>eller lignende)?

Erstat første linie med:

FileWriter fw = new FileWriter (file, true);

Se
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,boolean)

>Spørgsmål 2)
>------------
> String fil = new String("farve.gem");
> FileReader filr = new FileReader (fil);
> BufferedReader inFile = new BufferedReader (filr);
> String farve = inFile.readLine();
> System.out.println (farve);
>// Color gemtfarve = Color.black;
> convertStringToColor(farve);
>// Color gemtfarve = Color.convertStringToColor(java.lang.String farve);
> kunde.setBackground(gemtfarve);
> left.setBackground(gemtfarve);
> inFile.close();
>
>Compileren skriver alt muligt med at cannot resolve symbol, ligemeget
>hvordan jeg benytter convertStringToColor... Sagen er den, at jeg har gemt
>en fil med flg. tekst (ved at gemme en color-variabel):
>java.awt.Color[r=0,g=51,b=51]

Jeg tror at grunden til at compileren ikke kan finde
convertStringToColor er at der ikke er en convertStringToColor. Se

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Color.html

Når man skriver et objekt til en PrintWriter, bruges objektets
toString()-metode til at omsætte objektet til en streng. Colors
toString()-metode er ifølge dokumentationen kun til debugging brug. Du
skal nok ikke forvente at finde en tilsvarende der går den anden vej.

>Denne tekst er den eneste, der står i filen og indholdet skal omsættes til
>en farve af typen Color (farven tillægges til kunde og left-JPanelet).
>Hvordan gøres dette?

Kunne du ikke i stedet skrive rgb-værdien ud - altså farve.getRgb()?
Det er et enkelt tal og dermed lettere at læse ind igen. Du kan danne
et Color objekt udfra en rgb-værdi med new Color(rgb).

>På forhånd tak for at lede mig på rette vej. Det burde være 2 lette
>spørgsmål...?
>
>mvh.
>Martin Jørgensen


Martin Jørgensen (29-04-2004)
Kommentar
Fra : Martin Jørgensen


Dato : 29-04-04 20:38

Hej Ole.

"Ole Ildsgaard Hougaard" <oih@get2net.dk> skrev i en meddelelse
news:c2d2905vb77sm36v9h2hh64i417pmiik76@4ax.com...
> On Thu, 29 Apr 2004 17:58:38 +0200, Martin Jørgensen
> <unoder.spam@jay.spam.net> wrote:
-snip-

> >Hvad skal der stå, hvis jeg bare vil "appende" eller tilføje noget til en
> >fil, hver gang man f.eks. trykker på en button (implements
actionlistener,
> >eller lignende)?
>
> Erstat første linie med:
>
> FileWriter fw = new FileWriter (file, true);
>
> Se
>
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,boolean)

Ok, tusind tak - det var jo ligeså let som jeg troede... Jeg må prøve at
blive bedre til at læse dokumentationen på java.sun.com...

> >Spørgsmål 2)
-snip-
> >Denne tekst er den eneste, der står i filen og indholdet skal omsættes
til
> >en farve af typen Color (farven tillægges til kunde og left-JPanelet).
> >Hvordan gøres dette?
>
> Kunne du ikke i stedet skrive rgb-værdien ud - altså farve.getRgb()?
> Det er et enkelt tal og dermed lettere at læse ind igen. Du kan danne
> et Color objekt udfra en rgb-værdi med new Color(rgb).

Glimrende forslag... Jeg er kommet så langt at den gemmer farverne som
f.eks. "-3342388" i filen... Næste opgave er bare at hente den gemte
Color... Jeg ved ikke hvorfor der kommer et "-" foran, men håber at det er
ok. Jeg forsøgte at læse input fra filen direkte som en integer, men det
virkede vist ikke. Hvad skal jeg skrive? Jeg har forsøgt i 1½ time nu... Jeg
har:

String farvtal = inFile.readLine();
System.out.println (farvtal); //Check lige at tallet er korrekt...
int ftal; //ftal er en integer
ftal = java.lang.Integer.getInteger(farvtal);
Color hentetfarve = new Color(ftal); //Gem den hentede farve af
Color-typen...


I linjen med ftal = java.lang.....getInteger(farvtal), skriver compileren
"incompatible types"... Øv. Forslag modtages med kyshånd

mvh.
Martin Jørgensen



Anders K. Olsen (29-04-2004)
Kommentar
Fra : Anders K. Olsen


Dato : 29-04-04 21:20

"Martin Jørgensen" <unoder.spam@jay.spam.net> wrote in message
news:40915982$0$191$edfadb0f@dread12.news.tele.dk...
> Hej Ole.
>
> "Ole Ildsgaard Hougaard" <oih@get2net.dk> skrev i en meddelelse
> news:c2d2905vb77sm36v9h2hh64i417pmiik76@4ax.com...
> > Erstat første linie med:
> >
> > FileWriter fw = new FileWriter (file, true);
> >
> > Se
> >
>
http://java.sun.com/j2se/1.4.2/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,boolean)
>
> Ok, tusind tak - det var jo ligeså let som jeg troede... Jeg må prøve at
> blive bedre til at læse dokumentationen på java.sun.com...

> String farvtal = inFile.readLine();
> System.out.println (farvtal); //Check lige at tallet er korrekt...
> int ftal; //ftal er en integer
> ftal = java.lang.Integer.getInteger(farvtal);
> Color hentetfarve = new Color(ftal); //Gem den hentede farve af
> Color-typen...
>
>
> I linjen med ftal = java.lang.....getInteger(farvtal), skriver compileren
> "incompatible types"... Øv. Forslag modtages med kyshånd

Du kunne jo følge dit eget råd: Læse API dokumentationen - i dette tilfælde
for Integer klassen.

Integer.getInteger(String prop) læser værdien af en system property. Du er
vel interesseret i at lave værdien af en String om til en integer? Det kan
du gøre som:

int ftal = Integer.parseInt(farvtal);

Husk at fange og behandle den NumberFormatException som måske kan blive
kastet.

Desuden så returnerer Integer.getInteger() et Integer objekt, og ikke en
primitiv int type. Derfor får du en besked om "incompatible types". Hvis du
vil lave en Integer objekt om til en int, så skal du kalde .intValue() på
objektet.

/Anders



Martin Jørgensen (29-04-2004)
Kommentar
Fra : Martin Jørgensen


Dato : 29-04-04 22:46

Anders K. Olsen wrote:
> "Martin Jørgensen" <unoder.spam@jay.spam.net> wrote in message
> news:40915982$0$191$edfadb0f@dread12.news.tele.dk...
-snip-
> Du kunne jo følge dit eget råd: Læse API dokumentationen - i dette
> tilfælde for Integer klassen.

Som jeg har skrevet, så er jeg newbie. Jeg har læst allerede inden jeg
spurgte og jeg forstår det ikke. Det er jo ikke alle, der er ligeså dygtige
som dig.

> Integer.getInteger(String prop) læser værdien af en system property.
> Du er vel interesseret i at lave værdien af en String om til en
> integer? Det kan du gøre som:
>
> int ftal = Integer.parseInt(farvtal);
>
> Husk at fange og behandle den NumberFormatException som måske kan
> blive kastet.

Jeg har stjålet lidt kode fra en søgning på google i mangel af bedre:

public static int parseInt(String s) throws NumberFormatException {
return parseInt(s);
}



> Desuden så returnerer Integer.getInteger() et Integer objekt, og ikke
> en primitiv int type. Derfor får du en besked om "incompatible
> types". Hvis du vil lave en Integer objekt om til en int, så skal du
> kalde .intValue() på objektet.

Jeg har følgende, som ikke virker:

String fil = new String("farve.gemt");
FileReader filr = new FileReader (fil);
BufferedReader inFile = new BufferedReader (filr);
String farvtal = inFile.readLine();
System.out.println (farvtal); //Så langt så godt. Indtil her virker det.
int ftal = Integer.parseInt(farvtal);
kunde.setBackground(ftal.intValue()); //int cannot be dereferenced

left.setBackground(ftal.intValue()); //int cannot be dereferenced
inFile.close();


Jeg forstår ikke beskeden "int cannot be dereferenced".

mvh.
Martin Jørgensen

--
---------------------------------------------------------------------------
Home of Martin Jørgensen - http://www.martinjoergensen.dk



Lars Dam (29-04-2004)
Kommentar
Fra : Lars Dam


Dato : 29-04-04 23:07

On Thu, 29 Apr 2004 23:46:08 +0200
"Martin Jørgensen" <unoder.spam@jay.spam.net> wrote:

> > Desuden s_ returnerer Integer.getInteger() et Integer objekt, og ikke
> > en primitiv int type. Derfor f_r du en besked om "incompatible
> > types". Hvis du vil lave en Integer objekt om til en int, s_ skal du
> > kalde .intValue() p_ objektet.
>
> Jeg har f_lgende, som ikke virker:
>
> String fil = new String("farve.gemt");
> FileReader filr = new FileReader (fil);
> BufferedReader inFile = new BufferedReader (filr);
> String farvtal = inFile.readLine();
> System.out.println (farvtal); //S_ langt s_ godt. Indtil her virker det.
> int ftal = Integer.parseInt(farvtal);
> kunde.setBackground(ftal.intValue()); //int cannot be dereferenced
>
> left.setBackground(ftal.intValue()); //int cannot be dereferenced
> inFile.close();
>
>
> Jeg forst_r ikke beskeden "int cannot be dereferenced".

Der findes to 'grundtyper' i Java - simple typer, og objekter. Simple typer er f.eks. int, char, long, double, float, boolean, short (det var vist alle sammen). - du kan betragte simple typer som Java's 'atomer', og ovenstående liste er de tilgængelige grundstoffer ;)

Objekter er instanser af klasser, som f.eks. Point, String, Integer, Double, og disse indeholder medlemmer som typisk er referencer til andre klasser, simple typer og metoder.

Simple typer er ikke klasser, og derfor har disse ikke metoder og andre medlemmer. Når du bruger dot operatoren (punktum) så angiver du at du vil have referere til medlem i klassen, og du får så ovenstående fejl.

Da du _har_ konverteret strengen 'farvtal' til en int vha. refere til den statiske metode i Integer, så står du med et grundelement som ingen elementer har, men som kun indeholder den værdi den kan. Så derfor skal du blot bruge værdien:

kunde.setBackground(ftal);

Det var en omgang pølsesnak, men jeg håber du får lidt ud af det ;)


> mvh.
> Martin J_rgensen


vh. ld

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

Månedens bedste
Årets bedste
Sidste års bedste