Heim >Java >javaLernprogramm >Wie kann ich die Byte Order Mark (BOM) beim Lesen von Dateien in Java effizient überspringen?

Wie kann ich die Byte Order Mark (BOM) beim Lesen von Dateien in Java effizient überspringen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 02:10:14504Durchsuche

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

Byte Order Mark (BOM) in Java kann Probleme beim Lesen von Dateien verursachen

Für Code-Autoren, die BOM in ihr Dateiformat schreiben, ist BOM beispielsweise nützlich. Wenn es jedoch darum geht, diese Dateien zu lesen, insbesondere bei einer plattformunabhängigen Sprache wie Java, kann die Situation kompliziert sein.

Um die Stückliste zu überspringen, führen Sie die folgenden Schritte aus:

  1. Rufen Sie das Dateisystem des Dateisystems mit Path#getFileSystem() mit dem Paket java.nio ab.
  2. Rufen Sie den FileSystemProvider aus dem Dateisystem ab, der zum Lesen und Schreiben des Stammverzeichnisses des Dateisystems verwendet wird.
  3. Erstellen Sie einen StreamOpener, um die Stückliste zu verwalten.
  4. Öffnen Sie den FileChannel mit dem bereitgestellten StreamOpener.

Hier ist ein Beispiel, wie man die Stückliste überspringt und die Datei liest:

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) {
                // 处理读取到的字节
            }
        }
    }
}

Mit dieser Methode können Sie beim Lesen der Datei, die die Stückliste enthält, überspringen und die Datei lesen den Dateiinhalt genau.

Das obige ist der detaillierte Inhalt vonWie kann ich die Byte Order Mark (BOM) beim Lesen von Dateien in Java effizient überspringen?. 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