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 写入追加到文件

Java IO流 之 PrintWriter

MySQL 服务器在 localhost>:3306[root](disconnected)>nodeUnable to register mysql server 5.6 in Netb

java 为PrintWriter