Maison >Java >javaDidacticiel >Opérations sur les fichiers en Java

Opérations sur les fichiers en Java

WBOY
WBOYoriginal
2023-06-15 21:09:224385parcourir

Java est un langage de programmation largement utilisé dans divers domaines tels que les pages Web, les applications mobiles et l'Internet des objets. Il possède d'excellentes fonctionnalités multiplateformes et de puissantes capacités d'exploitation de fichiers. Cet article se concentrera sur les opérations sur les fichiers en Java.

Les opérations sur les fichiers font référence à la lecture, à l'écriture, à la création, à la suppression et à d'autres opérations connexes sur les fichiers. Les opérations sur les fichiers en Java sont principalement implémentées via la bibliothèque Java IO. La bibliothèque Java IO peut être divisée en deux types : NIO et IO. L'utilisation de ces deux bibliothèques sera présentée en détail ci-dessous.

1. Bibliothèque IO

La bibliothèque IO a été introduite dans la version Java 1.0. Il s'agit d'un ensemble de bibliothèques de classes utilisées pour implémenter des opérations d'entrée et de sortie. Nous pouvons lire des flux Get ou. écrire des fichiers. L'idée de programmation de la bibliothèque IO est orientée vers le flux d'octets (en octets), c'est-à-dire que pour tout type de données, elle ne peut lire et écrire que des données d'octets.

  1. Opérations sur les fichiers

La classe File de la bibliothèque Java IO représente un fichier ou un répertoire dans le système de fichiers. Nous pouvons effectuer des opérations liées aux fichiers via la classe File, telles que créer, supprimer, renommer des fichiers, etc.

1.1 Créer un fichier ou un répertoire

Correspondant à l'opération de nouveau fichier ou de nouveau répertoire dans le système de fichiers, nous pouvons utiliser les méthodes createNewFile() et mkdir() ou mkdirs() dans la classe File pour créer des fichiers ou des répertoires.

• Méthode createNewFile() : crée un nouveau fichier, ne fait rien si le fichier existe et renvoie false.

L'exemple de code suivant crée un fichier nommé "test.txt" :

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

• Méthode mkdir() : Crée un répertoire à un seul niveau, si le répertoire existe déjà, aucune opération n'est effectuée.

L'exemple de code suivant crée un répertoire nommé "exemple" :

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

• Méthode mkdirs() : Crée un répertoire multi-niveaux et ne fait rien si le répertoire existe déjà.

L'exemple de code suivant crée un répertoire nommé "exemple/enfant":

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

1.2 Suppression d'un fichier ou d'un répertoire

Correspondant à l'opération de suppression de fichier ou de suppression de répertoire dans le système de fichiers, nous pouvons utiliser delete dans la classe File ( ) supprime les fichiers ou les répertoires.

L'exemple de code suivant supprime le fichier "test.txt":

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

1.3 Renommer un fichier ou un répertoire

Correspondant à l'opération de renommage du fichier ou du répertoire dans le système de fichiers, nous pouvons utiliser la méthode renameTo() dans le fichier classe .

L'exemple de code suivant renomme "test.txt" en "test1.txt" :

File file = new File("test.txt");
File newFile = new File("test1.txt");
boolean result = file.renameTo(newFile); 
System.out.println(result);
  1. Lecture et écriture de fichiers

La bibliothèque Java IO fournit un riche ensemble de classes de flux d'octets et de flux de caractères pour le traitement des fichiers, en lecture et en lecture. opérations d'écriture.

2.1 Flux d'octets

Le flux d'octets exploite les données en octets. Les flux d'octets courants incluent FileInputStream, FileOutputStream, BufferedInputStream et BufferedOutputStream.

• FileInputStream

FileInputStream est une sous-classe d'InputStream, qui est utilisée pour convertir les données d'entrée en un flux d'octets et lire le contenu du fichier. Nous pouvons créer un objet de flux d'entrée de fichier en utilisant le constructeur de la classe FileInputStream.

L'exemple de code suivant implémente l'utilisation de FileInputStream pour lire le contenu d'un fichier :

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

• FileOutputStream

FileOutputStream est une sous-classe de OutputStream, qui est utilisée pour convertir les données de sortie en flux d'octets et les écrire dans un fichier. Nous pouvons créer un objet de flux de sortie de fichier en utilisant le constructeur de la classe FileOutputStream.

L'exemple de code suivant implémente l'utilisation de FileOutputStream pour écrire des chaînes dans des fichiers :

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

2.2 Flux de caractères

Les flux de caractères exploitent les données en unités de caractères. Les flux de caractères courants incluent FileReader, FileWriter, BufferedReader et BufferedWriter.

• FileReader

FileReader est une sous-classe de Reader, qui est utilisée pour lire le flux de caractères des fichiers. Nous pouvons créer un objet de flux d'entrée de fichier en utilisant le constructeur de la classe FileReader.

L'exemple de code suivant implémente l'utilisation de FileReader pour lire le contenu d'un fichier :

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

• FileWriter

FileWriter est une sous-classe de Writer, qui est utilisée pour écrire des chaînes dans des fichiers. Nous pouvons créer un objet de flux de sortie de fichier en utilisant le constructeur de la classe FileWriter.

L'exemple de code suivant implémente l'écriture d'une chaîne dans un fichier à l'aide de FileWriter :

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

2. Bibliothèque NIO

La bibliothèque NIO (New Input/Output) a été introduite dans la version Java 1.4, qui est un complément à la bibliothèque Java IO. L'encapsulation fournit un mode de fonctionnement plus flexible et plus efficace, prend en charge les opérations d'E/S non bloquantes et prend en charge les opérations de lecture et d'écriture simultanées. Par rapport à la bibliothèque IO, l'idée de programmation de la bibliothèque NIO est orientée vers la zone tampon (ByteBuffer).

  1. Opérations sur les fichiers

Les opérations sur les fichiers dans la bibliothèque NIO sont similaires à la bibliothèque IO, et la classe File est également utilisée pour les opérations liées aux fichiers. La bibliothèque NIO est plus efficace que la bibliothèque IO, elle est donc plus adaptée au traitement de fichiers volumineux.

1.1 Créer un fichier ou un répertoire

Correspondant à l'opération de nouveau fichier ou de nouveau répertoire dans le système de fichiers, nous pouvons utiliser les méthodes createNewFile() et mkdir() ou mkdirs() dans la classe File pour créer des fichiers ou des répertoires. La méthode de fonctionnement est la même que celle de la bibliothèque IO.

1.2 Suppression de fichiers ou de répertoires

Correspondant à la suppression de fichiers ou à la suppression de répertoires dans le système de fichiers, nous pouvons utiliser la méthode delete() dans la classe File pour supprimer des fichiers ou des répertoires. La méthode de fonctionnement est la même que celle de la bibliothèque IO.

1.3 Renommer des fichiers ou des répertoires

Correspondant à l'opération de renommage de fichier ou de répertoire dans le système de fichiers, nous pouvons utiliser la méthode renameTo() dans la classe File, et la méthode d'opération est la même que celle de la bibliothèque IO.

  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库操作稍微复杂,但是在处理大文件时更为高效。开发者可以根据自己实际需求选择合适的库进行文件操作。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn