Heim  >  Artikel  >  Java  >  Dateioperationen in Java

Dateioperationen in Java

WBOY
WBOYOriginal
2023-06-15 21:09:224295Durchsuche

Java ist eine Programmiersprache, die in verschiedenen Bereichen wie Webseiten, mobilen Anwendungen und dem Internet der Dinge weit verbreitet ist. Sie verfügt über hervorragende plattformübergreifende Funktionen und leistungsstarke Dateioperationsfunktionen. Dieser Artikel konzentriert sich auf Dateioperationen in Java.

Dateioperationen beziehen sich auf das Lesen, Schreiben, Erstellen, Löschen und andere damit verbundene Vorgänge an Dateien. Dateioperationen in Java werden hauptsächlich über die Java IO-Bibliothek implementiert. Die Java IO-Bibliothek kann in zwei Typen unterteilt werden: NIO und IO. Die Verwendung dieser beiden Bibliotheken wird im Folgenden ausführlich vorgestellt.

1. IO-Bibliothek

Die IO-Bibliothek wurde in Java Version 1.0 eingeführt. Es handelt sich um eine Reihe von Klassenbibliotheken, die zum Implementieren verschiedener Stream-(Stream)-Operationen verwendet werden Dateien schreiben. Die Programmieridee der IO-Bibliothek ist auf den Byte-Stream (in Byte) ausgerichtet, das heißt, sie kann für jeden Datentyp nur Byte-Daten lesen und schreiben.

  1. Dateioperationen

Die File-Klasse in der Java IO-Bibliothek repräsentiert eine Datei oder ein Verzeichnis im Dateisystem. Über die File-Klasse können wir dateibezogene Vorgänge ausführen, z. B. Dateien erstellen, löschen, umbenennen usw.

1.1 Erstellen Sie eine Datei oder ein Verzeichnis

Entsprechend der Operation „Neue Datei“ oder „Neues Verzeichnis“ im Dateisystem können wir die Methoden „createNewFile()“ und „mkdir()“ oder „mkdirs()“ in der File-Klasse verwenden, um Dateien oder Verzeichnisse zu erstellen.

• Methode createNewFile(): Erstellt eine neue Datei, unternimmt nichts, wenn die Datei vorhanden ist, und gibt false zurück.

Das folgende Codebeispiel erstellt eine Datei mit dem Namen „test.txt“:

File file = new File("test.txt");
boolean result = file.createNewFile();  
System.out.println(result);

• mkdir()-Methode: Erstellt ein einstufiges Verzeichnis. Wenn das Verzeichnis bereits vorhanden ist, wird kein Vorgang ausgeführt.

Das folgende Codebeispiel erstellt ein Verzeichnis mit dem Namen „example“:

File file = new File("example");
boolean result = file.mkdir();  
System.out.println(result);

• mkdirs()-Methode: Erstellt ein mehrstufiges Verzeichnis und führt nichts aus, wenn das Verzeichnis bereits vorhanden ist.

Das folgende Codebeispiel erstellt ein Verzeichnis mit dem Namen „example/child“:

File file = new File("example/child");
boolean result = file.mkdirs();
System.out.println(result);

1.2 Löschen einer Datei oder eines Verzeichnisses

Entsprechend dem Vorgang „Datei löschen“ oder „Verzeichnis löschen“ im Dateisystem können wir delete in der File-Klasse verwenden ( )-Methode löscht Dateien oder Verzeichnisse.

Das folgende Codebeispiel löscht die Datei „test.txt“:

File file = new File("test.txt");
boolean result = file.delete();
System.out.println(result);

1.3 Benennen Sie eine Datei oder ein Verzeichnis um.

Entsprechend dem Vorgang zum Umbenennen einer Datei oder eines Verzeichnisses im Dateisystem können wir die Methode renameTo() in der Datei verwenden Klasse .

Das folgende Codebeispiel benennt „test.txt“ in „test1.txt“ um:

File file = new File("test.txt");
File newFile = new File("test1.txt");
boolean result = file.renameTo(newFile); 
System.out.println(result);
  1. Lesen und Schreiben von Dateien

Die Java IO-Bibliothek bietet einen umfangreichen Satz von Byte-Stream- und Zeichen-Stream-Klassen für die Lese- und Leseverarbeitung von Dateien Schreiboperationen.

2.1 Byte-Stream

Byte-Stream verarbeitet Daten in Bytes. Zu den gängigen Byte-Streams gehören FileInputStream, FileOutputStream, BufferedInputStream und BufferedOutputStream.

• FileInputStream

FileInputStream ist eine Unterklasse von InputStream, die zum Konvertieren von Eingabedaten in einen Bytestream und zum Lesen von Dateiinhalten verwendet wird. Mit dem Konstruktor der FileInputStream-Klasse können wir ein Dateieingabe-Stream-Objekt erstellen.

Das folgende Codebeispiel implementiert die Verwendung von FileInputStream zum Lesen des Inhalts einer Datei:

FileInputStream fis = new FileInputStream("test.txt");
int data;
while ((data = fis.read()) != -1) {
   System.out.print((char) data);
}
fis.close();

• FileOutputStream

FileOutputStream ist eine Unterklasse von OutputStream, die zum Konvertieren von Ausgabedaten in einen Bytestream und zum Schreiben in eine Datei verwendet wird. Mit dem Konstruktor der FileOutputStream-Klasse können wir ein Dateiausgabe-Stream-Objekt erstellen.

Das folgende Codebeispiel implementiert die Verwendung von FileOutputStream zum Schreiben von Zeichenfolgen in Dateien:

String text = "Hello World!";
byte[] bytes = text.getBytes();
FileOutputStream fos = new FileOutputStream("test.txt");
fos.write(bytes);
fos.close();

2.2 Zeichenstrom

Zu den gängigen Zeichenströmen gehören FileReader, FileWriter, BufferedReader und BufferedWriter.

• FileReader

FileReader ist eine Unterklasse von Reader, die zum Lesen des Zeichenstroms von Dateien verwendet wird. Mit dem Konstruktor der FileReader-Klasse können wir ein Dateieingabe-Stream-Objekt erstellen.

Das folgende Codebeispiel implementiert die Verwendung von FileReader zum Lesen des Inhalts einer Datei:

FileReader fr = new FileReader("test.txt");
int data;
while ((data = fr.read()) != -1) {
   System.out.print((char) data);
}
fr.close();

• FileWriter

FileWriter ist eine Unterklasse von Writer, die zum Schreiben von Zeichenfolgen in Dateien verwendet wird. Mit dem Konstruktor der FileWriter-Klasse können wir ein Dateiausgabe-Stream-Objekt erstellen.

Das folgende Codebeispiel implementiert das Schreiben einer Zeichenfolge in eine Datei mit FileWriter:

String text = "Hello World!";
FileWriter fw = new FileWriter("test.txt");
fw.write(text);
fw.close();

2. NIO-Bibliothek

NIO-Bibliothek (Neue Eingabe/Ausgabe) wurde in Java 1.4-Version eingeführt, die eine Ergänzung zur Java IO-Bibliothek ist Die Kapselung bietet einen flexibleren und effizienteren Betriebsmodus, unterstützt nicht blockierende E/A-Vorgänge und unterstützt gleichzeitige Lese- und Schreibvorgänge. Im Vergleich zur IO-Bibliothek orientiert sich die Programmieridee der NIO-Bibliothek am Pufferbereich (ByteBuffer).

  1. Dateioperationen

Die Dateioperationen in der NIO-Bibliothek ähneln der IO-Bibliothek, und die Dateiklasse wird auch für dateibezogene Vorgänge verwendet. Die NIO-Bibliothek ist effizienter als die IO-Bibliothek und eignet sich daher besser für die Verarbeitung großer Dateien.

1.1 Erstellen Sie eine Datei oder ein Verzeichnis.

Entsprechend der Operation „Neue Datei“ oder „Neues Verzeichnis“ im Dateisystem können wir die Methoden „createNewFile()“ und „mkdir()“ oder „mkdirs()“ in der File-Klasse verwenden, um Dateien oder Verzeichnisse zu erstellen. Die Betriebsmethode ist die gleiche wie bei der IO-Bibliothek.

1.2 Dateien oder Verzeichnisse löschen

Entsprechend dem Löschen von Dateien oder Verzeichnissen im Dateisystem können wir die Methode delete () in der File-Klasse verwenden, um Dateien oder Verzeichnisse zu löschen.

1.3 Dateien oder Verzeichnisse umbenennen

Entsprechend dem Vorgang zum Umbenennen von Dateien oder Verzeichnissen im Dateisystem können wir die Methode renameTo () in der Klasse File verwenden. Die Operationsmethode ist dieselbe wie in der IO-Bibliothek.

  1. 文件读写

同样的,NIO库也提供了丰富的字节流和字符流类,用于进行文件的读写操作。

2.1 字节流

NIO库中的字节流类主要是基于通道和缓冲区(Buffer)的操作方式,常见的字节流类有FileChannel和ByteBuffer。

• FileChannel

FileChannel用于读写文件数据,它通常与ByteBuffer配合使用。我们可以使用FileChannel的open()方法创建文件通道。

下面的代码示例实现了使用FileChannel读取文件中的内容:

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
int data;
while ((data = fc.read(buffer)) != -1) {
   buffer.flip();
   while (buffer.hasRemaining()) {
      System.out.print((char) buffer.get());
   }
   buffer.clear();
}
fc.close();
raf.close();

• ByteBuffer

ByteBuffer提供了缓冲区,可用于读写文件数据。我们可以使用ByteBuffer的allocate()方法创建缓冲区。

下面的代码示例实现了使用ByteBuffer将字符串写入文件:

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
String text = "Hello World!";
buffer.put(text.getBytes());
buffer.flip();
fc.write(buffer);
fc.close();
raf.close();

2.2 字符流

NIO库中的字符流类主要是基于通道和缓冲区(Buffer)的操作方式,常见的字符流类有FileChannel、Charset和CharBuffer。

• FileChannel与ByteBuffer

它的操作方式同字节流,只是在使用ByteBuffer的时候需要设置编码方式,如下:

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
buffer.put("Hello World!".getBytes("UTF-8"));
buffer.flip();
CharBuffer charBuffer = Charset.forName("UTF-8").decode(buffer);
System.out.println(charBuffer.toString());
fc.close();
raf.close();

这段代码利用ByteBuffer将字符串写入文件,再将其通过Charset进行解码,创建Java字符串并输出。

• CharBuffer

CharBuffer同ByteBuffer类似,提供了缓冲区,可用于读写文件数据。其用法同ByteBuffer。

File file = new File("test.txt");
RandomAccessFile raf = new RandomAccessFile(file, "rw");
FileChannel fc = raf.getChannel();
CharBuffer buffer = CharBuffer.allocate(1024);
String text = "Hello World!";
buffer.put(text);
buffer.flip();
fc.write(Charset.forName("UTF-8").encode(buffer));
fc.close();
raf.close();

这段代码利用CharBuffer将字符串写入文件。

总结

Java IO库和NIO库各有优缺点,IO库操作简单而且容易理解,但是在处理大文件时效率较低;而NIO库操作稍微复杂,但是在处理大文件时更为高效。开发者可以根据自己实际需求选择合适的库进行文件操作。

Das obige ist der detaillierte Inhalt vonDateioperationen in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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