Есть ли способ сохранить элементы, присутствующие в файле, в массив объекта в java - PullRequest
1 голос
/ 01 мая 2020

Программа выдает правильный вывод, когда System.out.println(mem[i].memName);, но массив класса "member" выдает выходные данные (alex alex alex alex), т.е. из последней строки файла (упомянутой в КОНЦЕ КОДА), которую он должен дать все имена, перечисленные в файле.

import java.io.*;
import java.util.*;

class member//CLASS TO BE USED AS ARRAY TO STORE THE PRE REGISTERED MEMBERS FED INSIDE 
{                    //THE FILE "member.txt"

    static int memId;
    static String memName, memEmail, memPh, date;
}

public class entry// file name
{

    static DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd");
    static LocalDateTime now = LocalDateTime.now();
    static Scanner input = new Scanner(System.in);
    static member[] mem = new member[100];
    static trainer[] tr = new trainer[100];
    static FileWriter fwriter = null;
    static BufferedWriter bwriter = null;
    static FileReader fread = null;
    static BufferedReader bread = null;

    static void memberEntry() {
        int i = 0;
        System.out.println("NEW MEMBER IS BEING ADDED");

        try {
            fwriter = new FileWriter("C:\\Users\\itisa\\OneDrive\\Desktop\\GYM
                       PROJECT\\member.txt
            ",true);
                     bwriter = new BufferedWriter(fwriter);

            System.out.println("Member ID is being automatically genrated");
            int autoID = 101 + getMemberRecords();//Fetching the number of members so that ID can 
            //Be genrated automatically
            i = autoID % 100;//jumping toward the next loaction location
            System.out.println("Member ID of new member is" + autoID);
            mem[i].memId = autoID;

            System.out.print("Enter the name of the member:");
            mem[i].memName = input.next();

            System.out.print("Enter the email address of memeber:");
            mem[i].memEmail = input.next();

            System.out.print("Enter the contact number of memeber:");
            mem[i].memPh = input.next();

            System.out.println("Date has been feeded automatically:" + dtf.format(now));
            mem[i].date = dtf.format(now);

            bwriter.write(String.valueOf(mem[i].memId));
            bwriter.write("|");
            bwriter.write(mem[i].memName);
            bwriter.write("|");
            bwriter.write(mem[i].memEmail);
            bwriter.write("|");
            bwriter.write(mem[i].memPh);
            bwriter.write("|");
            bwriter.write(mem[i].date);
            bwriter.write("\n");

            System.out.println("MEMBER CREATED SUCCESSFULLY");
            System.out.println("---------------------------------------");

            bwriter.close();
        } catch (IOException e) {
            System.out.print(e);
        }
    }

    static int getMemberRecords() {
        int count = 0, i = 0;

        try {
            fread = new FileReader("C:\\Users\\itisa\\OneDrive\\Desktop\\GYM PROJECT\\member.txt");
            bread = new BufferedReader(fread);

            String lineRead = null;
            while ((lineRead = bread.readLine()) != null)//Just to get to know the number of member 
            //alreadyinside the file
            {
                String[] t = lineRead.split("\\|");
                mem[i].memId = Integer.parseInt(t[0]);
                mem[i].memName = t[1];
                mem[i].memEmail = t[2];
                mem[i].memPh = t[3];
                mem[i].date = t[4];
                i++;
                count++;

            }
            System.out.println(mem[0].memName);//should print the 1st name present in the name 
            //i.e, RAVI 

        } catch (IOException e) {
            System.out.println(e);
        }
        return count;
    }

    public static void main(String[] args) throws IOException {
        System.out.println("Total number of accounts:" + getMemberRecords());

    }
}

Элементы, хранящиеся в файле:

101|RAVI|itisadi23@gmai.com|9102019656|2020/04/30
102|aditya|adi@gmail.com|9386977983|2020/04/30
103|anurag|anu@ymail.com|10000000000|2020/04/30
104|alex|alex123@mail.com|2829578303|2020/04/30

Ожидаемый результат:

RAVI 
Total number of accounts = 4

Мой вывод:

alex
Total number of accounts=4

Короче говоря, в качестве выходных данных указывается фамилия независимо от того, какой номер индекса указан для извлечения данных.

1 Ответ

0 голосов
/ 01 мая 2020

Ваши member члены класса не должны быть static, если они есть, они совместно используются каждым member объектом класса.

Другая проблема заключается в том, что ваши member узлы массива не инициализируются, вам потребуется:

Живая демоверсия

class member
{                   
    int memId; //non-static
    String memName, memEmail, memPh, date; //non-static
}

и

//...
while ((lineRead = bread.readLine()) != null) {
    String[] t = lineRead.split("\\|");
    mem[i] = new member(); // initialize every node
    mem[i].memId = Integer.parseInt(t[0]);
    mem[i].memName = t[1];
    mem[i].memEmail = t[2];
    mem[i].memPh = t[3];
    mem[i].date = t[4];
    i++;
    count++;
}
System.out.println(mem[0].memName);
//...

Вывод:

RAVI

Обратите внимание, что вы можете использовать ArrayList или другую коллекцию java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...