Странный символ в начале импортированного CSV-файла - PullRequest
0 голосов
/ 09 мая 2019

Я анализирую один файл CSV в моем JTable. Проблема в том, что какой-то странный символ появляется перед моей самой первой записью каждый раз. Вот мой код:

JFileChooser chooser=new JFileChooser();
    chooser.showOpenDialog(null);
    File f=chooser.getSelectedFile();
    String filename=f.getAbsolutePath();
    pathF.setText(filename);

    try {
        FileReader fr=new FileReader(f);
        BufferedReader br= new BufferedReader(fr);

        DefaultTableModel model=(DefaultTableModel)jTable1.getModel();
        Object [] lines=br.lines().toArray();
        for(int i=0;i<lines.length;i++){
            String []row=lines[i].toString().split(";");
            model.addRow(row);
        }

Так что все в порядке, но перед первой записью появляется странный символ. Вот вывод: Screenshot of Application with occuring symbols

Как видите, перед i10 есть пустой квадрат. Конечно, это какой-то символ, но как я могу от него избавиться, потому что благодаря этому символу программа предполагает, что i10 и (квадрат) i10 - разные люди. Я также проверил это с System.out.println(lines[i].toString());, и результат был: enter image description here

Вы можете ясно видеть нежелательный символ в первом ряду. Как я могу это исправить?

1 Ответ

3 голосов
/ 09 мая 2019

Это называется спецификацией (метка порядка байтов). Он отмечает начало потока, который вы можете удалить, используя BOMInputStream из библиотеки Apache Commons csv. Используйте эту библиотеку для чтения и анализа csv, она намного проще и предоставляет множество функций.

Примерно так:

BOMInputStream bis = new BOMInputStream(file.getInputStream());
BufferedReader in = new BufferedReader(new InputStreamReader(bis,StandardCharsets.UTF_8));

Пример использования Apache Commons: https://www.callicoder.com/java-read-write-csv-file-apache-commons-csv/

Более подробная информация о спецификации: Как исключить спецификацию с помощью спецификации InputStream

...