将元素存储在文本文件中并调用信息

时间:2017-05-04 14:32:40

标签: java

我正在创建一个程序,它基本上包含有关元素(来自元素周期表)的信息,例如原子质量,数字和符号。我想将所有关于它们的信息存储在一个文本文件中,但不确定如何对它进行编码以单独调用信息(而不是逐行读取文本文件)。

这是我目前为每个元素使用的代码:

private Element(int atomicNumber, double atomicMass, String atomicSymbol, String atomicName) {
    this.atomicNumber = atomicNumber;
    this.atomicMass = atomicMass;
    this.atomicSymbol = atomicSymbol;
    this.atomicName = atomicName;
}

在同一个文件中,我创建了一个这样的元素:

Element H = new Element(1, 1.008, "H", "Hydrogen");

我怎么能把它们放在一个文本文件中并从那里读出来,而不是将所有118个元素放在与代码相同的文件中?

我正在使用getAtomicNumber()和getAtomicMass()等方法来调用这些信息。

感谢。

2 个答案:

答案 0 :(得分:0)

您有多种选择,因为您可以在文本文件中添加任何结构。我的推荐是XML或CSV格式。 CSV更易于管理/编辑,但XML更具结构化和易读性。我用一个简单的CSV。

在文件中为每个元素添加一行(将被引入您的Element类),并将每个Element属性(数字,质量,符号和名称)按特定顺序用逗号分隔,如下所示:

1,1.008,H,Hydrogen
2,5.021,C,Carbon
etc..

然后,您的代码应该逐行读取文件,创建元素类的实例,并将其保存在列表中。像这样:

您的元素类

public class Element {

    private int atomicNumber;
    private double atomicMass;
    private String atomicSymbol;
    private String atomicName;

    public Element(int atomicNumber, double atomicMass, String atomicSymbol, String atomicName) {
        this.atomicNumber = atomicNumber;
        this.atomicMass = atomicMass;
        this.atomicSymbol = atomicSymbol;
        this.atomicName = atomicName;
    }

    public double getAtomicMass() {
        return atomicMass;
    }

    public void setAtomicMass(double atomicMass) {
        this.atomicMass = atomicMass;
    }

    public String getAtomicSymbol() {
        return atomicSymbol;
    }

    public void setAtomicSymbol(String atomicSymbol) {
        this.atomicSymbol = atomicSymbol;
    }

    public String getAtomicName() {
        return atomicName;
    }

    public void setAtomicName(String atomicName) {
        this.atomicName = atomicName;
    }

    public int getAtomicNumber() {
        return atomicNumber;
    }

    public void setAtomicNumber(int atomicNumber) {
        this.atomicNumber = atomicNumber;
    }

    @Override
    public String toString() {
        return "atomicMass: " + atomicMass
            + " | atomicSymbol: " + atomicSymbol
            + " | atomicName: " + atomicName
            + " | atomicNumber: " + atomicNumber;
    }
}

元素文件阅读器

public class ElementsFileReader {

    public static List<Element> read(String filePath) throws IOException {
        FileReader fileReader = new FileReader(new File(filePath));

        BufferedReader br = new BufferedReader(fileReader);

        List<Element> elements = new ArrayList<>();
        String line = null;
        while ((line = br.readLine()) != null) {
            String[] lineParts = line.split(",");
            int atomicNumber = Integer.parseInt(lineParts[0]);
            double atomicMass = Double.parseDouble(lineParts[1]);
            String atomicSymbol = lineParts[2];
            String atomicName = lineParts[3];

            elements.add(new Element(atomicNumber, atomicMass, atomicSymbol, atomicName));
        }
        return elements;
    }
}
使用ElementsFileReader和Element

您的主要应用

public static void main(String[] args){
    String filePath = "the path to your text file";

    List<Element> elements;
    try {
        elements = ElementsFileReader.read(filePath);
    } catch(IOException e){
        System.err.println("Something gone wrong reading elements file...");
        e.printStackTrace();
        return;
    }

    for(Element element : elements){
        System.out.println(element);
        // do your stuff
    }
}

小心使用parseInt和parseDouble方法,我假设你的文本文件格式正确。 希望这可以帮到你。

答案 1 :(得分:0)

以相同的格式(1,1.008,H,Hydrogen)将所有元素写入文件,逐行读取并为每行创建一个Pojo对象并将其写入Map。

[ `id -u` -eq 0 ]

根据您的方便,您可以将Map键设置为任何其他唯一元素属性。