[JAVA] CSV-Import mit Stückliste

Hallo, das ist Misuda von Ingenieuren. Dieses Mal werde ich beschreiben, dass ich versucht habe, UTF-8 mit Stückliste per CSV-Import zu schreiben und zu lesen!

Hintergrund

Bei der Entwicklung eines Geschäftssystems erhalte ich die Anforderung "Ich möchte Daten erstellen!" In einem Stapel. .. .. Zu dieser Zeit denke ich zuerst über den Import mit CSV nach. Das Erstellen einer API kostet die andere Partei auch die Entwicklung.

** Das Problem hier ist, wie man CSV bearbeitet. ** **. Verwenden Sie * Microsoft Excel *? Immerhin ist es einfach zu bearbeiten!

Problem

Wenn Sie die Verwendung von * Microsoft Excel * in Betracht ziehen, können Sie diese bearbeiten, indem Sie eine CSV mit Shift-JIS erstellen. Wenn die Datenbank UTF-8 ist, muss der Zeichencode auf der Serverseite konvertiert werden. Wenn dies passiert, ist es ein Kampf mit dem Zeichencode. Um ehrlich zu sein, habe ich keine Lust zu gewinnen.

In einem solchen Fall, wenn es sich um UTF-8 mit Stückliste (Byte Order Mark) handelt, kann es anscheinend mit * Microsoft Excel * ohne verstümmelte Zeichen geöffnet werden!

Generieren Sie eine UTF-8-Datei mit Stückliste

Dieses Mal generiert JAVA die Datei. Im Fall von UTF-8 ist der Anfang der Datei [0xEF 0xBB 0xBF].

import java.io.*;
import java.util.Arrays;
import java.util.List;

public class Main {
    
    /**
     *Erstellen Sie eine CSV-Datei mit Stückliste (Zeichencode ist UTF)-8)
     *
     * @param 
     * @return 
     */
    public static void main(String[] args) {
        File file = new File("Dateipfad");
        List header = Arrays.asList("Apfel","Mandarine","Banane","Erdbeere","Melone","Traube");
        try(FileOutputStream fos = new FileOutputStream(file);
            OutputStreamWriter osw = new OutputStreamWriter(fos, "UTF-8");
            PrintWriter writer = new PrintWriter(osw)){
            //Stücklistenzuschuss
            fos.write(0xef);
            fos.write(0xbb);
            fos.write(0xbf);

            header.forEach(c -> {
                writer.print(c);
                writer.print(",");
            });
        } catch (IOException e) {
            System.out.println("Fehler beim Generieren der Datei.");
        }
    }

}

Dateiimport

Es ist in Ordnung, wenn die generierte Datei definitiv UTF-8 mit Stückliste ist, aber manchmal nicht. Geben Sie das Urteil ein und lesen Sie.

import java.io.*;
import java.nio.charset.StandardCharsets;
import org.apache.commons.codec.binary.Hex;


public class Main {

    /**
     *CSV-Datei mit Stückliste lesen (Zeichencode ist UTF-8)
     *
     * @param
     * @return
     */
    public static void main(String[] args) {
        File file = new File("Dateipfad");

        try (FileInputStream fs = new FileInputStream(file);
             InputStreamReader isr = new InputStreamReader(fs, StandardCharsets.UTF_8);
             LineNumberReader lnr = new LineNumberReader(isr)) {
            //Die erste Zeile
            String row = lnr.readLine();
            if (row != null && !row.isEmpty()) {
                //Holen Sie sich das erste Zeichen
                String bom = row.substring(0, 1);
                //Konvertieren Sie das erste Zeichen in ein Byte in ein Zeichen(Verwenden Sie die Apache Commons Codec Hex-Klasse)
                String bomByte = new String(Hex.encodeHex(bom.getBytes()));
                if ("efbbbf".equals(bomByte)) {
                    //Stückliste beseitigen
                    row = row.substring(1);
                }
                System.out.println(row);
            }
            //Informationen aus der zweiten Zeile aufteilen
        } catch (Exception e) {
            System.out.println("Fehler beim Lesen der Datei.");
        }
    }
}

Zusammenfassung

Sowohl MacOS als auch WindowsOS wurden in * Microsoft Excel * geöffnet und waren nicht verstümmelt und konnten bearbeitet werden! Danach denke ich, dass er mit einer Textdatei bearbeitet. Ich frage mich, ob es keine andere Wahl gibt, als es zu unterstützen.

Recommended Posts

CSV-Import mit Stückliste
Importieren Sie JSON mit SolrJ
Importieren Sie Dokumente mit SolrJ
Konvertieren von TSV-Dateien in CSV-Dateien (mit Stückliste) in Ruby
Ausgabe einer CSV-Datei mit offener CSV
Überprüfen Sie den CSV-Wert mit RSpec
[Rails] Implementierung der CSV-Importfunktion
CSV-Analyse mit Feldumbruchzeichen