BlårandMedlem sedan jan. 20031 504 inlägg
Har skapat en klass där jag har följande method. Poängen är att man ska skriva in det medsända uppgifterna i en "RandomAccessFile". Har försökt och vridit och vänt på detta, men får det inte att fungera.
Vad är det som är fel i nedanstående kod, alternativt vad krävs för justeringar för att jag ska kunna lagra de tre värdena på en post i "RandomAccessFile"-filen?
public void writePost(String strFilnamn, int intPost, int intOrgnr, String strNamn, String strOrt)throws IOException
{
try {
RandomAccessFile file = new RandomAccessFile(strFilnamn,"rw");
file.seek(intPost);
// Skriver in orgnr
file.writeInt(intOrgnr);
// Skriver in namn
StringBuffer buffer = null;
if ( strNamn != null )
buffer = new StringBuffer( strNamn );
else
buffer = new StringBuffer( 15 );
buffer.setLength( 15 );
file.writeChars( buffer.toString() );
// Skriver in filial
buffer = null;
if ( strOrt != null )
buffer = new StringBuffer( strOrt );
else
buffer = new StringBuffer( 15 );
buffer.setLength( 15 );
file.writeChars( buffer.toString() );
file.close();
} catch (IOException e) {
JOptionPane.showMessageDialog(null,"FEL - Något gick knas tyvärr.");
}
}
LimeMedlem sedan sep. 2001837 inlägg
Jag antar att du har tänkt såhär:
post 1: Organisationsnummer Namn Ort
post 2: Organisationsnummer Namn Ort
...
post n: Organisationsnummer Namn Ort
Vet inte hur du anropar writePost men om jag antar att du skriver:
tr.writePost("c:\\temp\\test.txt", 7, 10002, "Lime7", "Stockholm");
för att få post 7 så blir det lite fel...
Då flyttar då markören till position 7 i filen och skriver därifrån. Vad du borde göra är att kolla hur lång en post är. I ditt fall blir den alltid orgnr + 15 +15. Du borde, om du inte väljer att ha en delare, t.ex. ; eller en post på varje rad, även sätta ett fast avstånd på organisationsnummret. Som det är nu så skriver den char-representationen av organisationsnummret.
Kod kommer strax...
LimeMedlem sedan sep. 2001837 inlägg
static final int POST_LENGTH_NAME = 15;
static final int POST_LENGTH_TOWN = 15;
static final int POST_LENGTH_ORGNO = 15;
static final int POST_LENGTH_TOTAL = POST_LENGTH_NAME + POST_LENGTH_ORGNO + POST_LENGTH_TOWN+1;
public void writePost(String strFilnamn, int intPost, int intOrgnr, String strNamn, String strOrt)
throws IOException
{
try
{
RandomAccessFile file = new RandomAccessFile(strFilnamn, "rw");
file.seek(intPost*POST_LENGTH_TOTAL);
StringBuffer buffer = new StringBuffer();
StringBuffer tmp_buffer = new StringBuffer(15);
// Skriver in orgnr
tmp_buffer.append(intOrgnr);
tmp_buffer.setLength(POST_LENGTH_ORGNO);
buffer.append(tmp_buffer);
// Skriver in namn
if (strNamn != null)
tmp_buffer = new StringBuffer(strNamn);
else
tmp_buffer = new StringBuffer(POST_LENGTH_NAME);
tmp_buffer.setLength(POST_LENGTH_NAME);
buffer.append(tmp_buffer);
// Skriver in filial
if (strOrt != null)
tmp_buffer = new StringBuffer(strOrt);
else
tmp_buffer = new StringBuffer(POST_LENGTH_TOWN);
tmp_buffer.setLength(POST_LENGTH_TOWN);
buffer.append(tmp_buffer);
buffer.append(System.getProperty("line.separator"));
buffer.setLength(POST_LENGTH_TOTAL);
file.writeChars(buffer.toString());
file.close();
}
catch (IOException e)
{
System.out.println("FEL - Något gick knas tyvärr.");
e.printStackTrace();
}
Kanske lite bättre... men inte bra...
BlårandMedlem sedan jan. 20031 504 inlägg
Tack för informationen.
Det var visst placeringen av vart datat skulle skrivas in som var grundorsaken till problemet, då jag missat att flytta markören till rätt post i filen med file.seek(intPost*POST_LENGTH_TOTAL);.
När jag ändå är på gång, vad fyller e.printStackTrace(); som du använder när du felhanterar i din exempelkod, för funktion?
LimeMedlem sedan sep. 2001837 inlägg
e.printStackTrace() printar ut call-stacken. Då går det att se anropskjedjan och man får då exakt veta vilken rad som går åt helvete och vilka metoder som har anropat vem i vilken ordning.
Användbart när man kan få anrop till samma klass och samma metod från 100 olika andra klasser. Svårt att veta om det är "min" klass som gjort fel eller den som anropat metoden som skickat skräp.