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
Freigeben: 2024-12-23 02:10:14
Original
562 Leute haben es durchsucht

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

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!

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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage