0

私のプロジェクトでは、生徒ごとにファイルを作成する必要があり、メソッドが作成されたと思います。ここでは以下にあります

    public addStudent(String fullName, int grn, String formClass, String formTeacher)
    {
        //Default values
        int creativity = 0;
        int action = 0;
        int service = 0;
        int total = 0;

        //Initialize File
        RandomAccessFile adding     = new RandomAccessFile(new File(fullName + ".dat"), "rw");
        long fileSize = adding.length();
        adding.seek(fileSize);

        //Variables from Method
        adding.writeUTF(fullName + "\n");
        adding.writeInt(grn + "\n");
        adding.writeUTF(formClass  + "\n");
        adding.writeUTF(formTeacher  + "\n");

        //Variables created in method
        adding.writeInt(creativtiy + "\n");
        adding.writeInt(action + "\n");
        adding.writeInt(service + "\n");
        adding.writeInt(total + "\n");

        adding.close();
}

私はそれが正しくないと考え続けており、この行などの特定の部分について明確にしたいと思います

    RandomAccessFile adding     = new RandomAccessFile(new File(fullName + ".dat"), "rw");

fullname はメソッドに渡される変数で、学生の名前と姓です (例: John Lennon)。私がやりたいのは、「John Lennon.dat」という名前のファイルを用意することです。しかし、ここでの私のアプローチは間違っていると考え続けています。

別の質問は、整数値に関するものです。それらは随時更新されますが、current+new の単純な追加によって行われます。それ、どうやったら出来るの?

4

1 に答える 1

0
  1. fullnameファイルに名前を付けるためにフィルタリングされていないユーザー入力 ( ) を使用する場合は注意が必要です。これは、セキュリティ ホールにつながる可能性があります。fullnameファイルシステムで許可されていない、またはディレクトリを変更する特殊文字を確認する必要があります。他のディレクトリにある重要なファイルを上書きする可能性があるため、誰かがチェックせずに入力できる../importantfileと想像してください。fullname最も安全な方法は、ファイルに一般的な名前スキーマを使用することです ( など)。ファイル名との関係を別の場所 (おそらく file )data1.datに保存します。data2.datfullnameindex.dat

  2. ここでa を使用する正当な理由があると思いますRandomAccessFile。コードによれば、1 つのファイルに複数のレコードを含めることができます。レコードの開始位置を別の場所に保存しない場合は、レコードを次々と読み取る必要があります。レコードが変更されていることがわかった場合は、整数値の前にすべてのフィールドを読み取って、ファイルの位置が整数の開始位置を指すようにする必要があります。次に、整数を読み取り、値を変更し、ファイル位置を 4 バイト戻すことができます ( seek(-4))。次に、変更した整数値を書き込むことができます。

代替案:

  • ファイル全体を読み取り、整数値を変更してから、ファイル全体を新しく作成し、古いファイルを上書きできます。短いファイルの場合、これはそれほど複雑ではなく、パフォーマンスが大幅に低下する可能性があります (ただし、これは場合によって異なります。短時間に変更するファイルが数千ある場合、この代替手段はお勧めしません)。
  • 整数値のファイル位置を別の場所に保存し、これらを使用してこれらの値に直接アクセスできます。これは、文字列が不変の場合にのみ機能します。
  • XML、JSON、シリアル化されたオブジェクトなどの代替ファイル形式を使用できます。しかし、これらすべてがその場での変更をサポートしているわけではありません。
  • SQLite や H2 などの組み込みデータベースを使用して、データベースにファイル アクセスとインデックス作成を任せることができます。
于 2013-03-16T18:12:01.873 に答える