Diferència entre revisions de la pàgina «M3 - Programació»
(→Fitxers orientat a byte) |
(→Fitxers orientat a byte) |
||
Línia 130: | Línia 130: | ||
Mètodes emprats: | Mètodes emprats: | ||
− | :* '''setLength(long mida).''' | + | :* '''setLength(long mida).''' Modifica la mida del fitxer. Si el valor especificat és més petit que la mida actual, s’eliminen totes les dades per sobre de la |
+ | mida especificada. Si és més gran, el contingut extra és indefinit. | ||
− | :* '''long getFilePointer().''' | + | :* '''long getFilePointer().''' Avalua la posició on és en aquests moments l’apuntador, mesurat en el nombre de bytes des de l’inici del fitxer. |
Revisió del 20:25, 3 feb 2018
Contingut
UF1: Programació Estructurada
Activitats
UF3: Fonament de gestió de fitxers
Continguts
Fitxers orientat a byte
Accés següèncial
Les dades s’emmagatzemen com una seqüència de valors, i per tant, l’esquema general que s'aplica en fitxers orientats a caràcter també es pot aplicar a aquest altre tipus.
Representació de les dades en format binari.
Tipus | Paura clau Java | Mide (bytes) |
---|---|---|
caràcter | char | 2 |
byte | byte | 1 |
enter curt | short | 2 |
enter simple | int | 4 |
enter llarg | long | 8 |
real de simple precisió | float | 4 |
real de doble precisió | doble | 8 |
Inicialització
import java.io.File; import java.io.RandomAccessFile; // s’usa tant per llegir com per escriure dades RandomAccessFile raf = new RandomAccessFile(File ruta, String mode); // File ruta per especificar la ruta del fitxer // String mode per especificar el mode de treball a l'hora de processar el fitxer
Dels modes de treball possibles el dos més utilitzats són:
- r: mode lectura. Errors si el fitxer no existeix o si s'invoca a mètodes d'escriptura.
- rw: mode escriptura-lectura. Si el fitxer no existeix, es crearà un de nou buit. Si existeix, no s’esborren les seves dades.
Escriptura de dades
L’única manera de generar fitxers orientats a byte que puguin ser llegits correctament és mitjançant codi d’un programa.
Cada cop que es fa una operació de lectura o escriptura, l’apuntador es desplaça automàticament el mateix nombre de bytes amb què s’ha operat.
Mètodes disponibles per escriure dades:
Mètode | Bytes escrits |
---|---|
writeBoolean(boolean b) | 1 |
writeByte (byte v) | 1 |
writeChar(char c) | 2 |
writeDouble(double d) | 8 |
writeFloat(float f) | 4 |
writeInt(int i) | 4 |
writeLong(long l) | 8 |
writeShort(short s) | 2 |
Exemple d'escriptura de 20 enters:
public class EscriureEntersBinari { public static void main(String[] args) throws IOException { EscriureEntersBinari programa = new EscriureEntersBinari(); programa.inici(); } public void inici() throws FileNotFoundException, IOException { File f = new File("Enters.bin"); RandomAccessFile raf = new RandomAccessFile(f, "rw"); int valor = 1; for (int i = 0; i < 20; i++) { raf.writeInt(valor); valor = valor * 2; } System.out.println("Fitxer escrit satisfactòriament."); raf.close(); } }
Sobreescriptura de fitxers
La classe RandomAccessFile quan escriu en un fitxer, no esborra les dades existents, per la qual cosa pot quedar "brossa" al final del fitxer. En molts casos caldrà eliminar els bytes sobrants un cop acabada l'escriptura.
Mètodes emprats:
- setLength(long mida). Modifica la mida del fitxer. Si el valor especificat és més petit que la mida actual, s’eliminen totes les dades per sobre de la
mida especificada. Si és més gran, el contingut extra és indefinit.
- long getFilePointer(). Avalua la posició on és en aquests moments l’apuntador, mesurat en el nombre de bytes des de l’inici del fitxer.