我正在制作一个简单的一个 按钮 游戏,它是一款点击游戏。没有什么特别的,只有JButton
和JLabel
。我在Java IO Class上相当新,所以我不知道导致这种情况发生的原因。我没有收到任何错误,只是一个随机数,每次都是相同的数字。
public static void write(long data) {
File file = new File("data.txt");
path = file.getAbsolutePath();
try {
PrintWriter writer = new PrintWriter(file);
writer.println(data);
writer.close();
} catch (IOException e) {
System.out.println(e);
}
}
public static long read() {
long data = 0;
try {
BufferedReader reader = new BufferedReader(new FileReader(path));
data = reader.read();
reader.close();
return data;
} catch (IOException e) {
System.err.format("Exception occurred trying to read '%s'.", path);
e.printStackTrace();
return 0;
}
}
public static void gui() {
. . .
// Declarations {
JFrame frame = new JFrame("Clicker");
JPanel panel = new JPanel();
JButton clickerButton = new JButton("Click");
JLabel amountOfClicks = new JLabel("Click to get started!");
// }
. . .
// * * * * * * * * * * *
panel.setLayout(new GridLayout(2, 0));
// Action {
clickerButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent evt) {
if (read() >= 1) {
clickerCount = read() + 1;
amountOfClicks.setText("You have clicked: " + clickerCount + " times.");
write(clickerCount);
} else {
clickerCount = clickerCount + 1;
amountOfClicks.setText("You have clicked: " + clickerCount + " times.");
write(clickerCount);
}
}
});
// }
. . .
我得到的 随机 号码(48),当我点击按钮时它应该增加1.但是现在它开始于" 48&# 34;,第一次点击:增加1.第二:4。第三:1。然后停止增加。我之所以要写入文件,是因为我可以加载最后记录的数字。
答案 0 :(得分:2)
从Properties
文件中检索数据:
首先创建一个Properties
对象并向其添加数据。你可以认为它的行为类似于Map
。每个键都有一个存储的关联值。不幸的是,Properties
只存储字符串,但我们可以解决这个问题:
Properties props = new Properties();
props.setProperty("SomeKey", "SomeValue"); // String => String
props.setProperty("AnotherKey", String.valueOf(123456L)); // String => String (Long)
当然123456L
可以替换为long(或任何其他基本类型)的变量。对于非基元,您可以使用.toString()
。 (参见底部的非基元注释)
要将数据写入文件,您需要FileOutputStream
:
FileOutputStream output = new FileOutputStream("config.properties");
然后写入该文件:
props.store(output, null);
如果您打开该文件,则它是纯文本,您将看到如下所示的内容:
#Sun Jul 16 22:47:45 EST 2017
SomeKey=SomeValue
AnotherKey=123456
读取数据恰恰相反,现在我们需要FileInputStream
,我们会调用.load()
。
FileInputStream input = new FileInputStream("config.properties");
Properties props = new Properties();
props.load(input);
现在最后一部分是访问数据,记住一切都是字符串。
String someKey = props.getProperty("SomeKey");
long anotherKey = Long.valueOf(props.getProperty("AnotherKey"));
这就是它的全部内容。
您可以使用Long.parseLong(props.getProperty("AnotherKey"))
代替.valueOf()
。
对于非原语,这很可能不是一切,因为所有内容都保存为字符串。对于非基元,请查看Serializable