【问题标题】:RandomAccessFile: Adding space after last item?RandomAccessFile:在最后一项之后添加空格?
【发布时间】:2013-10-17 21:02:40
【问题描述】:

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

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

【问题讨论】:

    标签: java file-handling bluej randomaccessfile


    【解决方案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;
    }
    

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

    【讨论】:

    • 我发现使用像 # 这样的填充字符可以解决这个问题,而不是空格。但是谢谢,为了简单起见,我只是选择了 20 个字节,因为这是我第一次,谢谢!
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    相关资源
    最近更新 更多