Avatar billede scorp-d Nybegynder
30. maj 2007 - 12:28 Der er 8 kommentarer og
1 løsning

Hjælp til RandomAccessFile

Hej...

Hvis jeg køre følgende kode så får jeg skrevet 3 små firkanter:

File file = new File("test.txt");
try
        {
            RandomAccessFile raf = new RandomAccessFile(file, "rw");
            raf.seek(1);
            raf.writeBytes("test ");
            raf.close();
        }
        catch (FileNotFoundException e)
        {}
        catch (IOException e)
        {}

Hvis jeg så fjerner mellemrum til sidst ved 'writeBytes' eller sætter seek til at være 0 så skrive den det korrekte...

Spurgte min lære og han kunne ikke forklare det så ville være lækkert hvis der var en herinde der kunne ?
Avatar billede _carsten Nybegynder
30. maj 2007 - 12:48 #1
Jeg tvivler på du får skrevet 3 firkanter, derimod får du skrevet 1 firkant

            raf.seek(1);
            raf.writeBytes("test ");
            raf.close();

            Giver: 1 firkant + test og mellemrum


            raf.seek(1);
            raf.writeBytes("test");
            raf.close();

            Giver: 1 firkant + test og INGEN mellemrum


            raf.seek(0);
            raf.writeBytes("test ");
            raf.close();

            Giver: INGEN firkant + test og mellemrum


Årsag:
seek(1) sætter filepointer til position 1, position 1 findes IKKE i filen (filen er tom) derfor indsættes en såkaldt "null byte" == firkant(kan ikke helt huske definitionen på sådan en fætter)

seek(0) skriver fra begyndelsen af filen == ingen problemer.
Avatar billede _carsten Nybegynder
30. maj 2007 - 12:51 #2
"seek(0) skriver fra begyndelsen af filen == ingen problemer."

Rettere sagt: seek(0) sætter filepointer til position 0, og skriver så derfra == ingen problemer
Avatar billede scorp-d Nybegynder
30. maj 2007 - 13:50 #3
Ja det ville os være logisk nok....Også det det har givet når jeg har brugt det andre steder, men det gør det ikke her....

Og det er derfor jeg spørger, ved udemærket godt at firkanter bliver sat når man ikke siger at den skal have nogen værdi.
Avatar billede _carsten Nybegynder
30. maj 2007 - 14:03 #4
Øhh - jeg er ikke med på hvad du mener.

Hvis jeg kører din kode, får det resultat som jeg har beskrevet i min første kommentar.
Avatar billede scorp-d Nybegynder
30. maj 2007 - 15:09 #5
http://www.scorp-d.dk/RandomAcccess.avi

Rimelig dårlig opløsning og framerate, men man burde godt kunne se hvad der sker..

Hvilken version af JDK køre du ?
Avatar billede _carsten Nybegynder
30. maj 2007 - 15:36 #6
1.6 / 6.0

Det må være noget Notesblok støj, jeg får samme resultat hvis jeg åbner filen i Notesblok, det må skyldes det tegnsæt som Notesblok bruger som standard.

Jeg bruger altid TextPad - fik noget shit i Notesblok

Prøv TextPad og se resultatet: http://www.textpad.com/download/index.html
Avatar billede scorp-d Nybegynder
30. maj 2007 - 15:43 #7
Ja virkede os udemærket med Wordpad.... godtnok en ordentlig omgang tidsspild...
Avatar billede _carsten Nybegynder
30. maj 2007 - 19:25 #8
Ja, nu kunne vi jo også bare læse doc

Writes the string to the file as a sequence of bytes. Each character in the string is written out, in sequence, by discarding its high eight bits. The write starts at the current position of the file pointer.

Brug writeChar() eller writeChars() så har du ikke problemet(bruger Unicode 2-bit).
Avatar billede scorp-d Nybegynder
11. maj 2008 - 20:47 #9
lukket.
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