在我的项目中,我需要为每个学生创建一个文件,我想我已经创建了这个方法,现在它在下面
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”的文件。但我一直认为我的做法是错误的。
另一个问题是关于整数值。它们会不时更新,但通过简单添加当前+新。我该怎么做?
答案 0 :(得分:0)
如果您使用可能的用户输入(fullname
)未命名用于命名文件,则必须小心。这可能导致安全漏洞。您应该检查fullname
以查找文件系统中不允许的特殊字符或更改目录。想象一下有人可以输入../importantfile
作为fullname
而不检查是否可以覆盖其他目录中的一些重要文件。
最安全的方法是为您的文件使用一些通用名称架构(例如data1.dat
,data2.dat
,并将关系fullname
存储到另一个地方的文件名(可能是文件index.dat
)。
我认为你有充分的理由在这里使用RandomAccessFile
。根据您的代码,可以在一个文件中包含多个记录。如果您不将记录的起始位置存储在另一个位置,则必须读取一个接一个的记录。如果您发现要更改的记录,则必须在整数值之前读取所有字段,以便文件位置指向整数起始位置。然后,您可以读取整数,更改值,将文件位置移回4个字节(seek(-4)
)。然后你可以写出你修改过的整数值。
备选方案: