0

我正在编写一个程序,允许用户使用 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;
        }

所以基本上我怎样才能在文本文件的最后一项之后添加额外的空白空间?

4

1 回答 1

1

首先,为什么要为年龄分配 20 个字节?!这有点大,您的用户会活很多年吗!?可能的错误是城市的最后一个数据插入(当用户说没有任何数据时N),因为如果你插入例如new york,虽然这没有得到 20 个字节,所以最后一部分将小于 60 个字节,并且反之亦然,如果用户a very far far far city with friend batman在这超过 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;
}

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

于 2013-10-17T21:42:21.767 回答