我有一个项目,我需要获得用户输入,然后执行体积计算,所有这些我已经完成了几个不同的形状。但是,我需要能够将输入和计算存储到文件中,将每个形状存储到一个文件中,如果选中,我可以稍后阅读该文件。 我尝试过几种不同的方式,但无济于事。所有这些都给了我一个语法错误,除了我最近的尝试。但是,此尝试似乎不会写入文件,只在一行中返回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用于测试目的。
答案 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));
另外:如果您访问length
,depth
和volume
,请确保您在可以实际查看这些变量的范围内。如果您的值显示为所有这些值的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。您可能希望使用print
或println
,具体取决于您希望如何保存数据。要将三个值保存在单独的行上,可以使用
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));