【问题标题】:Is there any way to store the elements present in the file to the to the array of the object in java有没有办法将文件中存在的元素存储到java中对象的数组中
【发布时间】:2020-05-01 11:10:32
【问题描述】:

System.out.println(mem[i].memName); 时程序给出了正确的输出,但是类“成员”的数组给出了输出 (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

简而言之,无论给出什么索引号来获取数据,它都会给出姓氏作为输出。

【问题讨论】:

  • 培训师班..请提供
  • 我试图稍微改进一下格式,但你应该花一些时间来提高你的问题的质量,让它变得更具可读性,请停止尖叫,这太粗鲁了。
  • 你试过使用调试器吗?
  • @anastaciu 是的,你是对的;我没有很快意识到member 的所有成员都是static。很久以前学到的老教训,很高兴再次学习......
  • 感谢@anastaciu 为我的项目付出的努力!!!

标签: java arrays filereader


【解决方案1】:

您的member 类成员不能是static,如果是,则它们由每个member 类对象共享。

另一个问题是你的member 数组节点没有被初始化,你需要:

Live demo

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集合。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多