Maison >Java >javaDidacticiel >Comment puis-je ignorer efficacement la marque d'ordre des octets (BOM) lors de la lecture de fichiers en Java ?

Comment puis-je ignorer efficacement la marque d'ordre des octets (BOM) lors de la lecture de fichiers en Java ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-23 02:10:14501parcourir

How Can I Efficiently Skip the Byte Order Mark (BOM) When Reading Files in Java?

Byte Order Mark (BOM) en Java peut causer des problèmes lors de la lecture de fichiers

Pour les rédacteurs de code qui écrivent la BOM dans leur format de fichier, disons, la BOM est utile. Cependant, lorsqu’il s’agit de lire ces fichiers, notamment pour un langage indépendant de la plateforme comme Java, la situation peut s’avérer compliquée.

Pour ignorer la nomenclature, suivez ces étapes :

  1. Obtenez le système de fichiers du système de fichiers en utilisant Path#getFileSystem() avec le package java.nio.
  2. Récupérez le FileSystemProvider du système de fichiers utilisé pour lire et écrire le répertoire racine du système de fichiers.
  3. Créez un StreamOpener pour gérer la nomenclature.
  4. Ouvrez le FileChannel à l'aide du StreamOpener fourni.

Voici un exemple de la façon de sauter la nomenclature et de lire le fichier :

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.nio.file.StreamOpener;
import java.nio.channels.FileChannel;

public class SkipBOMExample {

    public static void main(String[] args) throws IOException {
        Path file = Paths.get("path/to/file.txt");
        FileSystem fs = FileSystems.getFileSystem(file.getFileSystem());
        FileSystemProvider provider = fs.provider();

        StreamOpener opener = (Path path, StandardOpenOption... options) -> {
            FileChannel channel = provider.newByteChannel(path, options);
            // 跳过3个字节(BOM的大小)
            channel.position(3);
            return channel;
        };

        try (FileChannel channel = Files.newByteChannel(file, StandardOpenOption.READ, opener)) {
            byte[] bytes = new byte[1024];
            while (channel.read(bytes) != -1) {
                // 处理读取到的字节
            }
        }
    }
}

En utilisant cette méthode, vous pouvez sauter lors de la lecture du fichier contenant la nomenclature BOM et lire le contenu du fichier avec précision.

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