Heim Java javaLernprogramm Dateien mit wahlfreiem Zugriff

Dateien mit wahlfreiem Zugriff

Jul 18, 2024 pm 07:08 PM

Java stellt die RandomAccessFile-Klasse bereit, um das Lesen und Schreiben von Daten an beliebigen Stellen in der Datei zu ermöglichen. Alle Streams, die Sie bisher verwendet haben, werden als schreibgeschützte oder schreibgeschützte Streams bezeichnet. Diese Streams werden sequentielle Streams genannt. Eine Datei, die mithilfe eines sequentiellen Streams geöffnet wird, wird als Datei mit sequenziellem Zugriff bezeichnet. Der Inhalt einer Datei mit sequenziellem Zugriff kann nicht aktualisiert werden. Allerdings ist es oft notwendig, Dateien zu ändern. Java stellt die Klasse RandomAccessFile bereit, um das Lesen und Schreiben von Daten an beliebigen Stellen in einer Datei zu ermöglichen. Eine Datei, die mit der Klasse RandomAccessFile geöffnet wird, wird als Random-Access-Datei bezeichnet.

Die Klasse RandomAccessFile implementiert die Schnittstellen DataInput und DataOutput, wie in der Abbildung unten dargestellt. Die Schnittstelle DataInput definiert die Methoden zum Lesen von Werten und Zeichenfolgen primitiver Art (z. B. readInt, readDouble, readChar, ). readBoolean, readUTF) und die Schnittstelle DataOutput definieren die Methoden zum Schreiben von Werten und Zeichenfolgen primitiven Typs (z. B. writeInt, writeDouble, writeChar, writeBoolean, writeUTF).

Image description

Beim Erstellen einer

RandomAccessFile können Sie einen von zwei Modi angeben: r oder rw. Modus r bedeutet, dass der Stream schreibgeschützt ist, und Modus rw gibt an, dass der Stream sowohl Lesen als auch Schreiben zulässt. Die folgende Anweisung erstellt beispielsweise einen neuen Stream, raf, der es dem Programm ermöglicht, aus der Datei test.dat: zu lesen und in diese zu schreiben

RandomAccessFile raf = new RandomAccessFile("test.dat", "rw");

Wenn

test.dat bereits existiert, wird raf erstellt, um darauf zuzugreifen; Wenn test.dat nicht existiert, wird eine neue Datei mit dem Namen test.dat erstellt und raf wird erstellt, um auf die neue Datei zuzugreifen. Die Methode raf.length() gibt die Anzahl der Bytes in test.dat zu einem bestimmten Zeitpunkt zurück. Wenn Sie neue Daten in die Datei einfügen, erhöht sich raf.length().

Wenn die Datei nicht geändert werden soll, öffnen Sie sie im

r-Modus. Dies verhindert eine unbeabsichtigte Änderung der Datei.

Eine Direktzugriffsdatei besteht aus einer Folge von Bytes. Eine spezielle Markierung namens

Dateizeiger wird an einem dieser Bytes positioniert. An der Stelle des Dateizeigers findet ein Lese- oder Schreibvorgang statt. Beim Öffnen einer Datei wird der Dateizeiger auf den Anfang der Datei gesetzt. Wenn Sie Daten in die Datei lesen oder schreiben, bewegt sich der Dateizeiger vorwärts zum nächsten Datenelement. Wenn Sie beispielsweise einen int-Wert mit readInt() lesen, liest die JVM 4 Bytes vom Dateizeiger, und jetzt ist der Dateizeiger 4 Bytes vor dem vorherigen Speicherort, wie in der Abbildung unten dargestellt.

Image description

Für ein

RandomAccessFile raf können Sie die Methode raf.seek(position) verwenden, um den Dateizeiger an eine angegebene Position zu bewegen. raf.seek(0) verschiebt es an den Anfang der Datei und raf.seek(raf.length()) verschiebt es an das Ende der Datei. Der folgende Code demonstriert RandomAccessFile.

package demo;
import java.io.*;

public class TestRandomAccessFile {

    public static void main(String[] args) throws IOException {
        try( // Create a random access file
            RandomAccessFile inout = new RandomAccessFile("inout.dat", "rw");
        ) {
            // Clear the file to destroy the old contents if exists
            inout.setLength(0);

            // Write new integers to the file
            for(int i = 0; i < 200; i++)
                inout.writeInt(i);

            // Display the current length of the file
            System.out.println("Current file length is " + inout.length());

            // Retrieve the first number
            inout.seek(0); // Move the file pointer to the beginning
            System.out.println("The first number is " + inout.readInt());

            // Retrieve the second number
            inout.seek(1 * 4); // Move the file pointer to the second number
            System.out.println("The second number is " + inout.readInt());

            // Retrieve the tenth number
            inout.seek(9 * 4); // Move the file pointer to the tenth number
            System.out.println("The tenth number is " + inout.readInt());

            // Modify the eleventh number
            inout.writeInt(555);

            // Append a new number
            inout.seek(inout.length()); // Move the file pointer to the end
            inout.writeInt(999);

            // Display the new length
            System.out.println("The new length is " + inout.length());

            // Retrieve the new eleventh number
            inout.seek(10 * 4); // Move the file pointer to the eleventh number
            System.out.println("The eleventh number is " + inout.readInt());
        }
    }

}

Nach dem Login kopieren
Aktuelle Dateilänge beträgt 800

Die erste Zahl ist 0
Die zweite Zahl ist 1
Die zehnte Zahl ist 9
Die neue Länge beträgt 804
Die elfte Zahl ist 555

Eine

RandomAccessFile wird für die Datei namens inout.dat mit dem Modus rw erstellt, um sowohl Lese- als auch Schreibvorgänge in Zeile 8 zu ermöglichen.

inout.setLength(0) setzt die Länge in Zeile 11 auf 0. Dadurch wird praktisch der alte Inhalt der Datei zerstört.

Die

for-Schleife schreibt in den Zeilen 14 und 15 200 int-Werte von 0 bis 199 in die Datei. Da jedes int value benötigt 4 Bytes, die Gesamtlänge der von inout.length() zurückgegebenen Datei beträgt jetzt 800 (Zeile 18), wie in der Beispielausgabe gezeigt.

Der Aufruf von inout.seek(0) in Zeile 21 setzt den Dateizeiger auf den Anfang der Datei. inout.readInt() liest den ersten Wert in Zeile 22 und bewegt den Dateizeiger auf die nächste Zahl. Die zweite Zahl wird in Zeile 26 gelesen.

inout.seek(9 * 4) (Zeile 29) verschiebt den Dateizeiger auf die zehnte Zahl. inout.readInt() liest die zehnte Zahl und verschiebt den Dateizeiger auf die elfte Zahl in Zeile 30. inout.write(555) schreibt eine neue elfte Zahl an der aktuellen Position ( Zeile 33). Die vorherige elfte Nummer wird zerstört.

inout.seek(inout.length()) verschiebt den Dateizeiger an das Ende der Datei (Zeile 36). inout.writeInt(999) schreibt einen 999 in die Datei (Zeile 37). Jetzt wird die Länge der Datei um 4 erhöht, sodass inout.length() 804 zurückgibt (Zeile 40).

inout.seek(10 * 4) verschiebt den Dateizeiger auf die elfte Zahl in Zeile 43. Die neue elfte Zahl, 555, wird in Zeile 44 angezeigt.

Das obige ist der detaillierte Inhalt vonDateien mit wahlfreiem Zugriff. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1668
14
PHP-Tutorial
1273
29
C#-Tutorial
1256
24
Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Verursacht die Sicherheitssoftware des Unternehmens, die die Anwendung nicht ausführt? Wie kann man es beheben und es lösen? Apr 19, 2025 pm 04:51 PM

Fehlerbehebung und Lösungen für die Sicherheitssoftware des Unternehmens, die dazu führt, dass einige Anwendungen nicht ordnungsgemäß funktionieren. Viele Unternehmen werden Sicherheitssoftware bereitstellen, um die interne Netzwerksicherheit zu gewährleisten. ...

Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Wie konvertiere ich Namen in Zahlen, um die Sortierung zu implementieren und die Konsistenz in Gruppen aufrechtzuerhalten? Apr 19, 2025 pm 11:30 PM

Lösungen zum Umwandeln von Namen in Zahlen zur Implementierung der Sortierung in vielen Anwendungsszenarien müssen Benutzer möglicherweise in Gruppen sortieren, insbesondere in einem ...

Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Wie vereinfachte ich Probleme mit der Feldzuordnung im Systemdocking mithilfe des Mapstruct? Apr 19, 2025 pm 06:21 PM

Die Verarbeitung von Feldzuordnungen im Systemdocken stößt häufig auf ein schwieriges Problem bei der Durchführung von Systemdocken: So kartieren Sie die Schnittstellenfelder des Systems und ...

Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Wie identifiziert Intellij IDEA die Portnummer eines Spring -Boot -Projekts, ohne ein Protokoll auszugeben? Apr 19, 2025 pm 11:45 PM

Beginnen Sie den Frühling mit der Intellijideaultimate -Version ...

Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Wie kann ich elegante Entitätsklassenvariablennamen erhalten, um Datenbankabfragebedingungen zu erstellen? Apr 19, 2025 pm 11:42 PM

Bei Verwendung von MyBatis-Plus oder anderen ORM-Frameworks für Datenbankvorgänge müssen häufig Abfragebedingungen basierend auf dem Attributnamen der Entitätsklasse erstellt werden. Wenn Sie jedes Mal manuell ...

Wie kann ich Java -Objekte sicher in Arrays umwandeln? Wie kann ich Java -Objekte sicher in Arrays umwandeln? Apr 19, 2025 pm 11:33 PM

Konvertierung von Java-Objekten und -Arrays: Eingehende Diskussion der Risiken und korrekten Methoden zur Konvertierung des Guss-Typs Viele Java-Anfänger werden auf die Umwandlung eines Objekts in ein Array stoßen ...

E-Commerce-Plattform SKU und SPU-Datenbankdesign: Wie berücksichtigen Sie sowohl benutzerdefinierte Attribute als auch Attributloses Produkte? E-Commerce-Plattform SKU und SPU-Datenbankdesign: Wie berücksichtigen Sie sowohl benutzerdefinierte Attribute als auch Attributloses Produkte? Apr 19, 2025 pm 11:27 PM

Detaillierte Erläuterung des Designs von SKU- und SPU-Tabellen auf E-Commerce-Plattformen In diesem Artikel werden die Datenbankdesignprobleme von SKU und SPU in E-Commerce-Plattformen erörtert, insbesondere wie man mit benutzerdefinierten Verkäufen umgeht ...

Wie verwendet ich die Redis -Cache -Lösung, um die Anforderungen der Produktranking -Liste effizient zu erkennen? Wie verwendet ich die Redis -Cache -Lösung, um die Anforderungen der Produktranking -Liste effizient zu erkennen? Apr 19, 2025 pm 11:36 PM

Wie erkennt die Redis -Caching -Lösung die Anforderungen der Produktranking -Liste? Während des Entwicklungsprozesses müssen wir uns häufig mit den Anforderungen der Ranglisten befassen, z. B. das Anzeigen eines ...

See all articles