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

时间:2013-10-17 21:02:40

标签: java file-handling bluej randomaccessfile

我正在编写一个允许用户使用randomaccessfile写入文本文件的程序。用户输入名称,年龄和地址,每个项目都是20个字节,因此记录长度为60个字节。当用户想要搜索记录时,他们输入记录号,程序进行搜索(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;
        }

所以基本上如何在文本文件中的最后一项之后添加额外的空格?

1 个答案:

答案 0 :(得分:1)

首先为什么要为年龄分配20个字节?!它真的很棒,你的用户多年来一直生活!? 可能的错误是最后一次数据插入(当用户说没有任何数据N)时,因为如果你插入例如new york,那么这不会得到20个字节,所以最后一节将少于60个字节,反之亦然,如果用户在超过20个字节时输入a very far far far city with friend batman,则会扩展数据。

所以为了解决问题,你应该确保最后的数据也应该是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;
}

试试这个并尝试一下。虽然我仍然认为你使用的方法确实是不合逻辑的。