gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:59:12 28 4
gpt4 key购买 nike

我正在编写一个程序,允许用户使用 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 时),因为如果您插入例如 new york,而这不会' t 获取 20 字节,因此最后一部分将小于 60 字节,反之亦然,如果用户输入 a very far far far city withfriend 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;
}

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

关于java - RandomAccessFile:在最后一项后添加空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19437227/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com