0

このコードを別のアプリケーションで使用して、ゲームのファイルに名前とハイスコアを書き込みました。現在、このコードを使用して .DAT ファイルから名前とパスワードを取得し、新しいユーザーとパスワードを追加できるようにしています。これが .DAT ファイルです。

michael123
speaker123
katherine123
motor123
username
password

これがコードです。ファイルの読み取りは正常に機能しますが、書き込みはまったく行われず、理由がわかりません。

InputStream file;
BufferedReader fileStream;
FileWriter fileWriter;
BufferedWriter fileWrite;
String temp = "";
int users = 0;

public void readUserInfo() throws IOException {
    try {
        file = Board.class.getResourceAsStream("users.DAT");
        fileStream = new BufferedReader(new InputStreamReader(file));
    } catch (Exception e) {
        System.out.println("File not found");
    }
    for (int i = 0; i < users; i++) {

            temp = fileStream.readLine();
            Board.username[i] = temp.trim();
            temp = fileStream.readLine();
            Board.password[i] = temp.trim();

    }
    //Close
    fileStream.close();
    file.close();
}

public void addUser() throws IOException {

    fileWriter = new FileWriter(Board.class.getResource("users.DAT").getFile(),true);
    fileWrite = new BufferedWriter(fileWriter);
    System.out.println("Users : " + users);
    //Skip already created users
   for (int i = 0; i < users; i++) {

        fileWrite.newLine();
        fileWrite.append(Board.username[i]);
        fileWrite.newLine();
        fileWrite.append(Board.password[i]);

    } 
    System.out.println("Adding" + Board.username[users] + " : " + Board.password[users]);
    //Add user  
    fileWrite.newLine();
    fileWrite.append(Board.username[users]);
    fileWrite.newLine();
    fileWrite.append(Board.password[users]);
    //Close
    fileWrite.close();
    System.out.println("Closed fileWrite");
}

私はネットビーンズを使用しています。読み取り元のファイルは、他のすべてのクラスと同じパッケージにあります。

4

2 に答える 2

0

文章で使用する読書file = Board.class.getResourceAsStream("users.DAT");では、新しいファイルを作成するだけですFile("users.DAT")addUser()

public void addUser() throws IOException {
       fileWriter = new FileWriter(Board.class.getResource("users.DAT").getFile());
       ....
}

編集:問題は、書き込み中に以前と同じファイルを取得していないことです。このメソッドを追加します

public File getUserDataFile() {
    return new File(Board.class.getResource("").getFile(), "users.DATA");
}
// then use it like this
new FileWriter(getUserDataFile());
// and
new BufferedReader(new InputStreamReader(getUserDataFile()));

ファイルを読み書きするときはいつでもアクセスしてください。問題はBoard.class.getResourceAsStream("users.DAT")、ファイルが存在しない場合に null を返すことです。

于 2013-09-15T19:19:55.767 に答える
0

おそらく、ファイルの状態 (定義済みのユーザーのセット) で jar をパッケージ化し、users.DATそれらをクラスパスから読み取ると、jar を作成した時点からのユーザーのみが表示されます。その後、書き込みは別のファイルに移動します。

ファイルシステムからもユーザーを読み取る必要があります。

アプリの作業ディレクトリを確認して、追加されたユーザーを含む正しいファイルがあるはずです。

また、ユーザーを追加するたびにすべてのユーザーを何度もコピーする必要はありません。ファイルを追加モードで開くだけです

fileWriter = new FileWriter(new File("users.DAT"), true);

ユーザーを削除できるようにしたい場合を除き、その場合はすべてをメモリに保持し、プログラムを終了するとき、または保存アクションで明示的に保存します。

于 2013-09-15T19:21:00.890 に答える