Прочитать файл CSV в объект Java

Я пытаюсь прочитать содержимое файла CSV в объект Java. Я нашел онлайн-ресурсы, в которых объясняются два способа чтения CSV, т. е. BufferReader/OpenCSV. Но большинство из них касается чтения по строкам (я имею в виду все данные строки как одно целое), проблема с моей реализацией заключается в том, что мой CSV имеет данные в столбцах, как показано ниже:

Обновлено:

Name,A,B,C,D
JoinDate,1/1/2019,1/1/2018,06/01/2018,1/1/2019
Math_Marks,80,50,65,55
Social_Marks,80,50,86,95
Science_Marks,70,50,59,85
FirstLang_Marks,60,50,98,45
SecondLang_Marks,90,97,50

Как вы видите, значение оценок не является обязательным, в приведенном выше файле у человека D нет оценок, перечисленных для «SecondLang_Marks».

и мой объект класса ниже:

public class StudentVO {

private String name;
private Calendar joinDate;
private int math_Marks;
private int social_Marks;
private int science_Marks;
private int FirstLang_Marks;
private int secondLang_Marks;

// All get and set methods for class variables    
}

может ли кто-нибудь помочь мне прочитать приведенный выше csv по вертикали на основе вертикальных заголовков и загрузить значения в объект класса.

Если возможно, приведите оба примера с использованием BufferReader и OpenCSV.

Спасибо

Это не файл CSV. Вероятно, вы можете использовать парсер HTML для анализа этого. Суп?

Sedrick 22.01.2019 20:26

Это файл HTML, который содержит только данные тега Table. CSV означает файл значений, разделенных запятыми, который вы будете читать только по строкам, а не по столбцам.

Rehan Javed 22.01.2019 20:27

Извините, я просто показываю формат, файл выглядит примерно так, как показано выше, с разделителем как ,

Raj K 22.01.2019 20:28

Вам нужно показать фактическую структуру файла.

Sedrick 22.01.2019 20:29

Если файл CSV содержит столбцовые данные, вам придется обрабатывать весь файл с каждым столбцом как с объектом данных, а не с каждой строкой.

Compass 22.01.2019 20:30

хорошо, фактический файл приходит как excel. из-за некоторых ограничений безопасности я планирую преобразовать его в поддерживаемый приложением формат csv и прочитать его.

Raj K 22.01.2019 20:33

Итак, можно ли читать Excel вертикально?

Raj K 22.01.2019 20:34

Какое расширение у файла. Excel может открывать различные форматы.

Sedrick 22.01.2019 20:36

xlsx - это расширение файла

Raj K 22.01.2019 20:38

@Robert Привет, я новичок в этой концепции, и я пробую и другие варианты, мне может потребоваться немного больше времени, чтобы вернуться и опубликовать свой подход, вы не можете проголосовать против, говоря, что попытка не предпринималась. И опять же, если вы чувствуете, что это то, чего он заслуживает, тогда все в порядке.

Raj K 23.01.2019 14:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
10
9 918
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Насколько я знаю, вы можете читать данные из файла только по строкам, нет никакого механизма для чтения файла по вертикали. Но у меня есть решение для этого, прочитайте весь файл. Вы можете создать массив студентов и инициализировать его с помощью конструктора по умолчанию, а затем установить данные при чтении вниз по строке.

try {
        BufferedReader reader = new BufferedReader(new FileReader("file.csv"));

        // Reading first line..
        String[] names = reader.readLine().split(",");
        // Execpt 'names' there are total 4 students, A,B,C,D.
        int totalStudents = names.length - 1;
        StudentVO[] array = new StudentVO[totalStudents];
        // Initialize all students with default constructor.
        for(int i = 0; i < array.length; i++) {
            array[i] = new StudentVO();
        }

        //////////////
        // Start reading other data and setting up on objects..
        // Line 2..
        String[] joinDates = reader.readLine().split(",");
        // i = 0 gives us the string 'joinDates' which is in the first column.
        // so we have to skip it and start it from i = 1
        for(int i = 1; i < joinDates.length; i++) {
            // setting the objects data..
            array[i - 1].setJoinDate(joinDates[i]); 
        }

        // And keep on doing this until SecondLang_Marks..

        reader.close();
    } catch (Exception e) {
        e.printStackTrace();
    }

По мнению меня, это лучший способ сделать это для этого решения.

Извините, файл, который я пытаюсь прочитать, - это Excel. Пытаюсь преобразовать его в CSV из-за того, что моя система (приложение) поддерживает формат чтения.

Raj K 22.01.2019 20:36

но, пожалуйста, дайте мне знать, возможно ли читать файл excel по вертикали

Raj K 22.01.2019 20:37

Вы можете преобразовать файл excel в CSV, после преобразования вы можете легко обработать его в java. Позвольте мне объяснить вам идею сделать волшебство, после создания CSV, не используйте openCSV и т. д., просто напишите свой собственный алгоритм для чтения всего файла, используя класс BufferedReader, метод readLine() читает одну строку из файла, как на сначала запустите его '<table>', продолжайте объединять все данные файла в одну строку, используя разделитель "\n" в конце каждой строки, добавляйте отслеживание запятой, когда она приходит, добавляйте эту полную строку в ArrayList< String> и инициализируйте строку обратно в "" и начните делать это снова.

Rehan Javed 22.01.2019 20:42

После прочтения всего файла запустите цикл for для ArrayList<String>, каждая строка в списке представляет один элемент вашего столбца excel и просто проанализируйте его с помощью JSoup для чтения данных из HTML. :) Не забудьте принять ответ, если он вам поможет, и высказать свои замечания после того, как попробуете.

Rehan Javed 22.01.2019 20:44

спасибо за ответ, я видел что-то подобное в Интернете, но проблема в том, что значения не являются обязательными, поэтому, если есть пустое значение, логика путается с информацией при назначении ее объекту java.

Raj K 22.01.2019 20:50

Я не понимаю, что ты сказал, можешь объяснить.

Rehan Javed 22.01.2019 20:59

Мне жаль. Я обновил свой вопрос, т. Е. Как узнать, не имеет ли человек D значения в «SecondLang_Marks», если я прочитал информацию без заголовков, то есть ли способ узнать, что представляют данные столбца?

Raj K 22.01.2019 21:57

Я обновил ответ, проверьте его и не забудьте принять его, если он действительно помогает. Потому что это хороший способ чтения по вертикали.

Rehan Javed 22.01.2019 22:15

Большое Вам спасибо. Позвольте мне применить изменение и посмотреть, как оно работает.

Raj K 22.01.2019 22:21

Другие вопросы по теме