0

我有一个项目,我需要获取用户输入然后执行体积计算,所有这些我已经完成了几个不同的形状。但是,我需要能够将每个形状的输入和计算存储到一个文件中,如果选择该文件,我以后可以从中读取。我尝试了几种不同的方式来做到这一点,但无济于事。除了我最近的尝试外,所有这些都给了我一个语法错误。但是,此尝试似乎并未写入文件,并且仅在一行上返回 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 用于测试目的。

4

2 回答 2

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));

另外:如果您访问length,depthvolume,请确保您处于可以实际看到这些变量的范围内。如果所有这些值都显示为 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(..); 请参阅相关文档(请注意,您可能需要一些特定Writer的子类,而不是通用的子类)。

于 2013-02-24T17:22:07.510 回答
1

我相信问题就在这里

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

printf是打印格式。你可以在这里阅读。您可能希望使用其中一个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));
于 2013-02-24T17:26:35.620 回答