Java GUI - 将输入/计算存储到txt tile中

时间:2013-02-24 17:16:44

标签: java swing file-io jbutton string-parsing

我有一个项目,我需要获得用户输入,然后执行体积计算,所有这些我已经完成了几个不同的形状。但是,我需要能够将输入和计算存储到文件中,将每个形状存储到一个文件中,如果选中,我可以稍后阅读该文件。 我尝试过几种不同的方式,但无济于事。所有这些都给了我一个语法错误,除了我最近的尝试。但是,此尝试似乎不会写入文件,只在一行中返回0.0。任何帮助将不胜感激

public JButton getCalculateButton()
{
    JButton spa; 
    spa = new JButton("Calculate Volume");
    spa.setMnemonic('C');
    spa.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {               
            DecimalFormat num = new DecimalFormat(",###.##");
            double length, depth, volume;
            String instring;

            instring = lengthField.getText();
            if (instring.equals("")){
                instring = "0";
                lengthField.setText("0");
            }
            length = Double.parseDouble(instring);

            instring = depthField.getText();
            if (instring.equals("")){
                instring = "0";
                depthField.setText("0");
            }
            depth = Double.parseDouble(instring);

            volume = length * 8 * 4.8284 * depth;
            volumeField.setText(num.format(volume));

        }
    });
    return spa;
}

public JButton getSaveButton(){
    JButton save; 
    save = new JButton("Save Data");
    save.setMnemonic('C');
    save.addActionListener(new ActionListener(){

        public void actionPerformed(ActionEvent e) {

            PrintWriter writer;
            try {
                writer = new PrintWriter(new FileWriter("spaFile.txt"));
                writer.printf(String.valueOf(length), String.valueOf(depth), String.valueOf(volume));
                writer.close();

            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }           
    });

    return save;
}

这是我的GUI的一部分,它进行计算并希望存储数据,但不会。

public JButton getSearchButton()
{
    JButton search; 
    search = new JButton("Search");
    search.setMnemonic('S');
    search.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e)
        {               
            FileInputStream fileStream;
            try {
                fileStream = new FileInputStream("spaFile.txt");
                 DataInputStream in = new DataInputStream(fileStream);
                    BufferedReader reader = new BufferedReader(new InputStreamReader(in));
                    System.out.println(reader.readLine());
                    reader.close();
            } catch (FileNotFoundException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }

        }
    });
    return search;
}

}

这是要阅读的部分,尽管我还没有完全将它作为GUI用于测试目的。

2 个答案:

答案 0 :(得分:1)

我不确定你真的想要

writer.printf(String.valueOf(length), String.valueOf(depth),
    String.valueOf(volume));

在保存按钮的ActionListener中。该语句使用String.valueOf(length)作为将被格式化的字符串,并将其后的所有内容用作格式规范;你可能想要

writer.printf(String.valueOf(length) + ", " + String.valueOf(depth) +
    ", " + String.valueOf(volume));

另外:如果您访问lengthdepthvolume,请确保您在可以实际查看这些变量的范围内。如果您的值显示为所有这些值的0.0,则表示您没有在您读取这些值的位置分配您希望它们具有的值。


以下是我最近用于在.txt文件中保存一些信息的一些代码:

try {
        FileWriter writer = new FileWriter(path);

        for (Movie movie : movies) {
            writer.write(movie.toString() + LINE_SEPARATOR);
        }

        writer.close();
    } catch (IOException e) {
        e.printStackTrace();
    }

变量的名称有望告诉你它们的目的是什么。注意:每次使用代码时,这都会覆盖文件的内容;要将内容附加到文件中,请使用Writer#append(..);请参阅docs(注意您可能需要一些特定的Writer子类,而不是通用子类。)

答案 1 :(得分:1)

我相信问题就在这里

writer.printf(String.valueOf(length), String.valueOf(depth), String.valueOf(volume));

printf是打印格式。你可以阅读here。您可能希望使用printprintln,具体取决于您希望如何保存数据。要将三个值保存在单独的行上,可以使用

writer.println(String.valueOf(length));
writer.println(String.valueOf(depth));
writer.println(String.valueOf(volume));

或者如果您希望它们位于逗号分隔的同一行,您可以使用

writer.print(String.valueOf(length) + "," + String.valueOf(depth) + "," + String.valueOf(volume));