2013-02-24 57 views
0

我有一个项目,我需要获取用户输入,然后执行体积计算,所有这些都是针对几种不同形状完成的。但是,我需要能够将输入和计算存储到每个形状的文件中,并将其保存到文件中,如果选择该文件,我可以稍后阅读它。 我试图用几种不同的方法做到这一点,但无济于事。除了我最近的尝试之外,所有这些都给了我一个语法错误。然而,这个尝试似乎没有写入文件,只在一行中返回0.0。任何帮助,将不胜感激Java GUI - 将输入/计算存储到txt瓦片

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

如果您还没有解决这问题,我建议你退后一步,写*另一个*小程序,说明你遇到的问题。这被称为[SSCCE](http://www.sscce.org)。这样做会帮助您更清楚地了解问题,甚至可以自行找到解决方案。如果你仍然有问题,通过这个过程使你的问题在你的脑海中变得更加清晰,这样你就可以用精确的方式在这里写下你的问题,并且更快地得到你想要的帮助。 – 2013-02-24 21:35:15

回答

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子类,而不是通用子类)。

+0

这确实有助于仅显示单个0.0的问题,现在它显示了我使用的3个条目,但是它仍然不保存数据并且仅显示0.0的(3x)。它也还没有创建一个物理txt文件,似乎只是一个临时读取文件,因为我无法在elcipse中找到txt,如果我重新打开该程序,它也不会追加,只是重新开始。 – user1174357 2013-02-24 17:29:00

+0

您可能想看看[PrintWriter]上的文档(http://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#printf%28java.lang.String, %20java.lang.Object ...%29)。我会在我的答案中附加一些代码,说明我最近(可能是业余的)如何将需要的东西保存到.txt文件中。 – 2013-02-24 17:33:45

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

谢谢先生,不过看起来我的文件并没有一起创造。我知道有正确的格式,但没有保存的数据。 – user1174357 2013-02-24 18:00:29