Příklad Java RandomAccessFile
Table of Contents
Úvod
RandomAccessFile je třída v Javě, která umožňuje přístup ke souboru pomocí ukazatele. Umožňuje čtení a zápis dat na libovolnou pozici v souboru, aniž by bylo nutné číst nebo zapisovat celý soubor. To je užitečné pro přístup k velkým souborům, kde je potřeba přistupovat pouze k určitým částem.
RandomAccessFile je vyhledávatelný stream, což znamená, že lze kdykoli přesunout ukazatel na libovolnou pozici v souboru. Umožňuje také čtení a zápis dat v libovolném formátu, např. bajty, krátké celá čísla, dlouhá celá čísla nebo řetězce.
Použití RandomAccessFile
Syntaxe pro vytvoření objektu RandomAccessFile je následující:
java
RandomAccessFile file = new RandomAccessFile("soubor.txt", "rw");
kde:
* file
je název objektu RandomAccessFile
* soubor.txt
je název souboru, který se má otevřít
* rw
je režim přístupu, který umožňuje čtení i zápis
Jakmile je objekt vytvořen, můžete jej použít k provedení následujících operací:
Čtení dat
* int read()
– Čte jediný bajt z aktuální pozice ukazatele
* byte[] read(byte[] b)
– Čte bajty do pole b
* String readLine()
– Čte řádek textu z aktuální pozice ukazatele
* long getFilePointer()
– Vrací aktuální pozici ukazatele v souboru
Zápis dat
* void write(int b)
– Zapisuje jediný bajt na aktuální pozici ukazatele
* void write(byte[] b)
– Zapisuje bajty z pole b
* void writeLine(String s)
– Zapisuje řádek textu na aktuální pozici ukazatele
* void seek(long pos)
– Přesouvá ukazatel na zadanou pozici v souboru
Metody RandomAccessFile
RandomAccessFile poskytuje řadu metod pro manipulaci se souborem:
* void close()
– Zavře soubor
* long length()
– Vrací délku souboru
* void setLength(long newLength)
– Nastaví délku souboru
* Channel getChannel()
– Vrací kanál souboru
* FileChannel channel()
– Vrací kanál souboru
* FileDescriptor getFD()
– Vrací deskriptor souboru
* boolean readBoolean()
– Čte booleovskou hodnotu
* byte readByte()
– Čte byte
* char readChar()
– Čte znak
* double readDouble()
– Čte double
* float readFloat()
– Čte float
* int readInt()
– Čte int
* long readLong()
– Čte long
* short readShort()
– Čte short
* String readUTF()
– Čte řetězec kódovaný UTF
* void writeBoolean(boolean v)
– Zapisuje booleovskou hodnotu
* void writeByte(int v)
– Zapisuje byte
* void writeChar(int v)
– Zapisuje znak
* void writeDouble(double v)
– Zapisuje double
* void writeFloat(float v)
– Zapisuje float
* void writeInt(int v)
– Zapisuje int
* void writeLong(long v)
– Zapisuje long
* void writeShort(int v)
– Zapisuje short
* void writeUTF(String str)
– Zapisuje řetězec kódovaný UTF
Závěr
RandomAccessFile je výkonný nástroj pro přístup ke souborům v Javě. Umožňuje čtení a zápis dat na libovolnou pozici v souboru, aniž by bylo nutné číst nebo zapisovat celý soubor. To je užitečné pro přístup k velkým souborům, kde je potřeba přistupovat pouze k určitým částem.
RandomAccessFile poskytuje řadu metod pro manipulaci se souborem, včetně metod pro čtení a zápis dat, pohyb ukazatele a získání informací o souboru. Je to všestranná a účinná třída pro práci se soubory v Javě.
Časté dotazy
1. K čemu se používá RandomAccessFile?
RandomAccessFile se používá pro přístup ke souborům v Javě pomocí ukazatele. Umožňuje čtení a zápis dat na libovolnou pozici v souboru, aniž by bylo nutné číst nebo zapisovat celý soubor.
2. Jak vytvořím objekt RandomAccessFile?
Objekt RandomAccessFile lze vytvořit pomocí následující syntaxe:
java
RandomAccessFile file = new RandomAccessFile("soubor.txt", "rw");
kde soubor.txt
je název souboru, který se má otevřít, a rw
je režim přístupu, který umožňuje čtení i zápis.
3. Jak čtu data z RandomAccessFile?
Data lze číst z RandomAccessFile pomocí metod read()
a readLine()
. Například, k načtení jednoho bajtu použijte:
java
int b = file.read();
4. Jak zapisuji data do RandomAccessFile?
Data lze zapisovat do RandomAccessFile pomocí metod write()
a writeLine()
. Například, k zapsání jednoho bajtu použijte:
java
file.write(b);
5. Jak přesunu ukazatel v RandomAccessFile na jinou pozici?
Ukazatel lze přesunout na jinou pozici v RandomAccessFile pomocí metody seek()
. Například, k přesunutí ukazatele na pozici 100 použijte:
java
file.seek(100);
6. Jak zjistím délku souboru RandomAccessFile?
Délku souboru RandomAccessFile lze zjistit pomocí metody length()
.
java
long length = file.length();
7. Jak zavřu RandomAccessFile?
RandomAccessFile lze zavřít pomocí metody close()
.
java
file.close();
8. Jak získám kanál souboru RandomAccessFile?
Kanál souboru RandomAccessFile lze získat pomocí metody getChannel()
.
java
FileChannel channel = file.getChannel();
9. Proč bych měl používat RandomAccessFile místo FileInputStream nebo FileOutputStream?
RandomAccessFile se používá, když je třeba přistupovat ke souborům pomocí ukazatele. To je užitečné pro přístup k velkým souborům, kde je potřeba přistupovat pouze k určitým částem. FileInputStream a FileOutputStream jsou lepší volbou pro sekvenční přístup k souborům.
10. Je RandomAccessFile bezpečný pro vlákna?
RandomAccessFile není bezpečný pro vlákna. Pokud potřebujete sdílet objekt RandomAccessFile mezi více vlákny, použijte třídu java.nio.channels.FileLock
k synchronizaci přístupu.