Рубрики
Без рубрики

Чтение и сортировка данных в общем виде – Дженерики в Java

Я продемонстрирую универсальный класс Java, который будет считывать и записывать объекты любого типа… Помеченный java, алгоритмами, дженериками.

Я продемонстрирую универсальный класс Java, который будет читать и записывать объекты любого типа объектов, переданных ему (любой Примитивный тип данных или ваши пользовательские классы Как объяснено в этом примере)

Подумайте, у вас есть класс с именем Студенты в котором есть имя и удостоверение личности для студента.

Теперь также рассмотрим другой класс с именем Сотрудники у которых также есть имя , идентификатор и часы работы .

Теперь мы хотим реализовать универсальный класс, который будет автоматически записывать объект в файл с именем файла, начинающимся с имени класса . Теперь, если уже есть .txt файл того же класса, он должен добавить файл с заданным новым объектом.

Программа также должна быть способна читать требуемый файл. Метод read() будет возвращать общий ArrayList который мы можем ввести привести к нашему требуемому объекту, например, если мы хотим прочитать список студентов, хранящийся в txt-файле, тогда метод read() вернет общий список массивов, и мы можем ввести тип его в Список массивов студентов и легко использовать его.

Следовательно, наше Требование Удовлетворяется,

Программа для чтения и записи объектов любого типа плюс она записывает объекты того же типа в свои собственные текстовые файлы (добавляет, если они уже присутствуют, или создает новые, если объект такого типа записан в 1-й раз), что делает его потрясающим кодом, который автоматически обрабатывает файлы.

Итак, сначала я создал два класса с именем Students.java и Employees.java и мой основной класс – это Main.java .

Main.java показано в конце этого поста, в то время как Student.java И Сотрудники.java не показана из соображений сложности, но если вам действительно нужно их увидеть.

Посетить Здесь для более подробного объяснения с пояснением вывода.

В Students.java Я сделал Конструктор , геттеры и установщики для имени и я d

В Обоих Классах Я Создал Метод С Именем getData() Это Просто Отображает Данные (Имя, идентификатор, часы работы и т.д.) нашего Объекта.

Создание Универсального Класса

Я сделал имя класса GenericRead_Write.java и я параметризовал его с помощью . Мы также создали поле с именем объект с Типом T . Теперь в Конструктор Я установил объект экземпляра с локально переданным объектом . Назначение переменной состояние объясняется в коде .

public class GenericRead_Write{

    T object;
    int state  = 0;

    public GenericRead_Write(T object){
        this.object = object;
    }

    public void write(){/* CODE EXPLAINED NEXT */};
    public ArrayList read(){/* CODE EXPLAINED NEXT */};
}

Универсальная запись() Метод

public void write(){
        state = 1;
        String fileName = object.getClass().getName() + ".txt";
        ArrayList list = new ArrayList<>();
        list = read();
        list.add(object);
        try {
            FileOutputStream file = new FileOutputStream(fileName);
            ObjectOutputStream outputFile = new ObjectOutputStream(file);
            for (T obj:
                 list) {
                outputFile.writeObject(obj);
            }


        }catch (Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }

Объяснение

Строка.getClass().getName() + ".txt"; Это в основном получает имя объекта вы прошли в Общий класс с добавлением .txt в конце этого. Далее мы создадим список массивов с T в качестве параметра типа со списком имен.

список()

В четвертой строке мы вызываем метод read() , чтобы проверить, есть ли файл с именем Имя файла уже присутствует или нет. Если он присутствует, то мы читаем этот файл и сохраняем объекты в списке, предполагая, что для студентов или сотрудников файла нет [Это два тестовых класса, которые я сделал для демонстрации] на этом этапе мы добавляем объект, переданный пользователем, в список с именем ArrayList. И в блоке Try и Catch мы создаем объект FileOutStream с именем файла, являющимся именем файла (он также автоматически создает файл с таким именем, если его нет), а затем мы создаем объект для ObjectOutputStream для записи объекта в файл. И, наконец, с помощью цикла Foreach мы записываем объект в файл. Перед компиляцией файла нет.

Общее чтение() Метод

public ArrayList read() {
        String fileName = object.getClass().getName() + ".txt";
        ArrayList list = new ArrayList<>();
        try{
            FileInputStream file = new FileInputStream(fileName);
            ObjectInputStream inputFile = new ObjectInputStream(file);
            boolean END_OF_FILE = false;
            while (!END_OF_FILE){
                try {
                    list.add((T) inputFile.readObject());
                }catch (EOFException e){
                    // When reaches END OF FILE we set the Boolean END_OF_FILE to TRUE
                    END_OF_FILE = true;
                }catch (Exception e){
                    JOptionPane.showMessageDialog(null, e.getMessage());
                }
            }

        }catch (FileNotFoundException j){
            if(state == 1){
                // Do Nothing... When state is 1 it means the write method is called
                // Since, the wite method will automatcally create new file is not found
                // So we don't require our program to show exception if read() is called from write()
            }else {
                // When state is 0 means the write() is not called so if file does not exits
                // in this case we show Error Message that file is not found
                JOptionPane.showMessageDialog(null, j.getMessage());
            }

        }catch (Exception e){
            JOptionPane.showMessageDialog(null, e.getMessage());
        }

        return list;
    }

Объяснение

Прежде всего, этот метод вернет универсальный список массивов, поэтому мы использовали ArrayList в качестве возвращаемого типа.

Как и в предыдущем случае, мы создаем точное Имя файла и Список массивов названный список . Теперь для чтения объектов мы будем использовать объект FileInputStream и передайте его в ObjectInputStream . Теперь мы создадим логическую переменную с именем END_OF_FILE , которая изначально будет ложной теперь в цикле while мы можем не (!) //КОНЕЦ ФАЙЛА Таким образом, цикл будет выполняться, считывать объекты и сохранять их в Список массивов . Теперь в заявлении catch мы можем использовать Исключение EOFException (Исключение КОНЦА ФАЙЛА) и когда мы дойдем до конца, мы можем просто поставить END_OF_FILE равно TRUE Следовательно, цикл закончится. Теперь мы можем просто вернуть список .

Сейчас в Main.java мы можем получить доступ к методам наших объектов , возвращаемых этим списком , используя тип приведение .

Если у вас есть какие-либо вопросы, задайте их мне в разделе комментариев. Посещать, мой сайт для получения дополнительных руководств и примеров

Оригинал: “https://dev.to/saimhafeez20/read-and-sort-data-generically-java-generics-5bnk”