Java RandomAccessFile:在最后一项后添加空格?

Java RandomAccessFile:在最后一项后添加空格?,java,file-handling,bluej,randomaccessfile,Java,File Handling,Bluej,Randomaccessfile,我正在编写一个程序,允许用户使用randomaccessfile写入文本文件。用户输入姓名、年龄和地址,每个项目都是20字节,因此记录长度是60字节。当用户想要搜索一条记录时,他们输入一个记录编号,程序进入seek(n*60),这60个字节被存储到一个字节数组中,然后输出。除了当用户想要最后一条记录时,这一切都很好。我找不到一种方法在姓名、年龄、地址后添加额外的空格来填充60个字节。由于这个原因,我得到了错误java.io.EOFException:null 以下是我用来写入文件的代码:

我正在编写一个程序,允许用户使用randomaccessfile写入文本文件。用户输入姓名、年龄和地址,每个项目都是20字节,因此记录长度是60字节。当用户想要搜索一条记录时,他们输入一个记录编号,程序进入seek(n*60),这60个字节被存储到一个字节数组中,然后输出。除了当用户想要最后一条记录时,这一切都很好。我找不到一种方法在姓名、年龄、地址后添加额外的空格来填充60个字节。由于这个原因,我得到了错误java.io.EOFException:null

以下是我用来写入文件的代码:

      while(!done){
        junk.seek(y);
        System.out.println("Enter name.");
        junk.writeBytes(sc.nextLine());
        y+=20;
        System.out.println("Enter age.");
        junk.seek(y);
        junk.writeBytes(sc.nextLine());
        y+=20;
        System.out.println("Enter city.");
        junk.seek(y);
        junk.writeBytes(sc.nextLine());
        y+=20;
        System.out.println("Are you done?(Y/N)");
        choice = sc.nextLine();
        if(choice.equalsIgnoreCase("Y")){
            done = true;
        }

那么基本上,我如何在文本文件的最后一项之后添加额外的空白呢?

首先,为什么要为年龄分配20个字节?!这真的有点大,你的用户能活很多年吗!? 可能的错误是城市的最后一次数据插入(当用户说没有任何数据
N
)时,因为如果您插入例如
newyork
,而这不会得到20个字节,因此最后一部分将小于60个字节,反之亦然,如果用户与好友蝙蝠侠一起进入了一个很远的城市,而这个城市超过了20个字节,则会扩展数据

所以为了解决这个问题,您应该确保最后一个数据也是20字节

while(!done){
        junk.seek(y);
        System.out.println("Enter name.");
        junk.writeBytes(sc.nextLine());
        y+=20;
        System.out.println("Enter age.");
        junk.seek(y);
        junk.writeBytes(sc.nextLine());
        y+=20;
        System.out.println("Enter city.");
        junk.seek(y);
        String city=sc.nextLine();
        System.out.println("Are you done?(Y/N)");
        choice = sc.nextLine();
        if(choice.equalsIgnoreCase("Y")){
            if(city.length()>20){city-city.substring(0,20);}
            else if(city.length()<20){city=city+new String(new byte[20-city.length()]);}
            done = true;
        }
        junk.writeBytes(city);
        y+=20;
}
while(!done){
垃圾搜索(y);
System.out.println(“输入名称”);
junk.writeBytes(sc.nextLine());
y+=20;
System.out.println(“输入年龄”);
垃圾搜索(y);
junk.writeBytes(sc.nextLine());
y+=20;
System.out.println(“输入城市”);
垃圾搜索(y);
字符串city=sc.nextLine();
System.out.println(“完成了吗?(是/否)”);
choice=sc.nextLine();
if(选择相等信号情况(“Y”)){
if(city.length()>20){city.substring(0,20);}

else if(city.length()我发现使用像#这样的填充字符可以解决这个问题,而不是空的空格。但是谢谢,为了简单起见,我选择了20字节,因为这是我第一次,谢谢!