Java PrintWriter - 在 NetBeans 中将文件保存到源包
Posted
技术标签:
【中文标题】Java PrintWriter - 在 NetBeans 中将文件保存到源包【英文标题】:Java PrintWriter - Save File to Source Package in NetBenas 【发布时间】:2014-04-18 17:06:32 【问题描述】:我在 NetBeans 中使用以下 java 代码来读取和写入文件。
import java.io.*;
import java.util.*;
public class FileReadWrite
StringTokenizer tokenizer;
BufferedReader inFile;
PrintWriter outFile;
File myFile;
private int[] highscores = new int[3];
public FileReadWrite() throws IOException, FileNotFoundException
public int[] ReadFromSave() throws IOException, FileNotFoundException
inFile = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/files/highscores.txt" )));
tokenizer = new StringTokenizer(inFile.readLine());
int i = 0;
while (tokenizer.hasMoreTokens())
highscores[i] = Integer.parseInt(tokenizer.nextToken());
i++;
inFile.close();
return highscores;
public void SaveFile(int score) throws IOException, FileNotFoundException
if (score >= highscores[0])
highscores[2] = highscores[1];
highscores[1] = highscores[0];
highscores[0] = score;
else if (score >= highscores[1])
highscores[2] = highscores[1];
highscores[1] = score;
else if (score >= highscores[2])
highscores[2] = score;
PrintWriter outFile = new PrintWriter(new FileWriter("/files/highscores.txt"));
String line = highscores[0] + " " + highscores[1] + " " + highscores[2];
outFile.println(line);
outFile.close();
我编写了一个俄罗斯方块程序,想在每场比赛后保存高分。当用户下次打开应用程序时,他们会看到前 3 个分数。在我添加“getClass().getResourceAsStream”之后,ReadFromSave() 方法开始正常工作。但是我无法让 SaveFile() 方法工作。我给出错误“找不到路径/文件”。我应该如何在 NetBeans 中使用 PrintWriter 以便它保存到源包中,从而更新 jar。因此,当应用程序完全关闭并重新打开时,它会打印最近的分数。如果无法做到这一点,我可以在哪里保存数据以免丢失?
谢谢!!
【问题讨论】:
【参考方案1】:如果您希望能够再次保存分数,使用getResourceAsStream
并不是一个好主意 - 这适用于与应用程序捆绑在一起的资源,通常在 jar 文件中,并且通常是只读的。
您可能需要考虑使用Java preferences API 或为该文件制定一些特定位置以用于存储高分。然后在保存时写入该文件,并在加载时读取它。我个人不会使用PrintWriter
(它会吞下异常)或FileWriter
(你不能指定字符编码),但两者都应该工作。您只需要确保从保存它的同一文件中加载乐谱。 (不清楚/files/highscores.txt
是否真的是一个合适的文件保存到...你有一个/files
目录吗?你是否希望这是相对于你的应用程序的工作目录?)
(此外,最好开始遵循 Java 命名约定,使用 camelCasing
作为方法名称......并在完成后使用 try-with-resources 语句关闭编写器、流等,而不是手动调用close
。)
【讨论】:
【参考方案2】:你在这里混合了两件事。您正在保存到绝对路径“/files/highscores.txt”,但您正在从类路径而不是文件系统路径读取。你必须选择一种方法,但我会远离这里的绝对路径。
但是,更好的方法可能是使用 Preferences API,或在此处使用Properties.load / store。如果你要进行 IO 操作,最好研究一下 Apache Commons IO,其中读取文件可以像 FileUtils.readLines(file, "UTF-8"); 一样简单。
【讨论】:
以上是关于Java PrintWriter - 在 NetBeans 中将文件保存到源包的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Java 1.4 中设置 BufferedReader 和 PrintWriter 的超时时间?
Java PrintWriter - 在 NetBeans 中将文件保存到源包
[Java]PrintWriter&FileWriter 写入追加到文件
MySQL 服务器在 localhost>:3306[root](disconnected)>nodeUnable to register mysql server 5.6 in Netb