如何在 Java 中使用从外部文件输入中获取的对象名称创建对象 [已关闭]

How to create object in Java with the Object name taken from external file input [closed]

提问人:Bach Nguyen 提问时间:5/20/2020 最后编辑:Null ReferenceBach Nguyen 更新时间:5/21/2020 访问量:600

问:


想改进这个问题吗?通过编辑这篇文章来更新问题,使其仅关注一个问题。

3年前关闭。

我有一个带有构造函数 as 的 java 和一个允许我从每个对象获取客户名称的方法class CustomerCustomer(string firstName, string lastName)getName()Customer

然后我有一个文件,上面有名字和姓氏,如下例所示:input.txt

Alan, Walker

Tom, Hanks

如何自动读取上面每一行的名字和姓氏,并相应地为该人名创建一个对象?Customer

示例:我想让程序自动读取第一行“Alan, Walker”并创建对象,然后对第二行执行相同的操作AlanWalker = new Customer("Alan", "Walker")

其次,我的第二个任务是让用户能够从键盘发出命令,以获取创建的客户的名称。例如:用户可以键入“Alan Walker,打印名称”,程序将运行以提供所需的输出为“Alan Walker”。我该如何实现?AlanWalker.getName()

Java IO流

评论

1赞 5/20/2020
这回答了你的问题吗?如何从文件的内容创建 Java 字符串?

答:

0赞 UnknownBeast 5/20/2020 #1

在 java 中,我们无法创建动态变量,但您可以动态创建对象,如下所示。我的建议是使用 map 并将密钥保留为人名,然后将客户对象存储为值,当有人使用 scanner(仅举例)输入名称时,应用程序应该检查地图内部并返回相应的值,即客户对象。

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

public class Demo {


    List<String> data = new ArrayList<>();

    {
        data.add("Abhishek");
        data.add("Alan");
    }

    public void demo()
    {

        data.forEach( name -> {

            Customer customerObj = null;
            try 
            {
                customerObj =  Customer.class.getConstructor(String.class).newInstance(name);
            } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                e.printStackTrace();
            }

            System.out.println(customerObj.getName());
        } );



    }

    public static void main(String[] args)
    {

        new Demo().demo();

    }
}
1赞 CureMe 5/20/2020 #2

我在下面写了这个问题的解决方案,其中包括使用 HashMap 按值访问特定对象。(哈希图)下面的代码将针对名称创建 Person 对象的 HashMap。

public static final HashMap<String, Person> people = new HashMap<>();

对于这些示例,将使用下面的 Person 类:

public class Person {

    private String firstName, lastName;

    public Person(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public String getName() {
        return firstName + " " + lastName;
    }

}

首先,可以使用 BufferedReader 读取所有文件,并为每一行创建一个对象,如下所示:

File txtFile = new File("names.txt");
BufferedReader txtFileReader = new BufferedReader(new FileReader(txtFile));
String line = null;
line = txtFileReader.readLine();

while (line != null) {
    String firstName = line.split(", ")[0];
    String lastName = line.split(", ")[1];

    Person person = new Person(firstName, lastName);
    people.put(person.getName(), person);

    line = txtFileReader.readLine();
}
txtFileReader.close();

此代码将为文件中的每一行有效输入创建一个新的 Person 实例,格式为 。<first_name>, <last_name>

我们现在将有一个 HashMap,如下所示:

"Alan Walker", PERSON OBJECT
"Tom Hanks", PERSON OBJECT

然后根据用户输入与每个对象进行交互,我们可以使用用户输入和以下代码从人们的 HashMap 中检索对象:Alan Walker, print name

BufferedReader consoleInput = new BufferedReader(new InputStreamReader(System.in));
String input = consoleInput.readLine();
String name = input.split(", ")[0];
Person chosenPerson = people.get(name);

从这里,您可以对对象执行操作,例如,如果要获取对象的名称,则可以执行以下操作:

chosenPerson.getName()

希望这会有所帮助。