java编程题,判断输入内容是否是”end”,如何把List内容写入文件,写入文件是什么意思?

1)从控制台循环输入帐户信息,以逗号隔开:”账号,姓名,金额,性别”,check正确后封装为对象加入List,当控制台输入“end”输入截止。把List内容写入文件。步骤... 1) 从控制台循环输入帐户信息,以逗号隔开:”账号,姓名,金额,性别”,check正确后封装为对象加入List,当控制台输入“end”输入截止。把List内容写入文件。
步骤:
1. 从控制台输入账户信息
2. 判断输入内容是否是”end”。如果是则进入步骤5
3. 验证账户信息,验证正确后加入List
4. 验证失败,重新转入步骤1
5. 把List内容写入文件
(考察点:list的插入、遍历
一下是我的代码 帮我看看哪里有错,谢谢。
public class AccountIo {
public static void checkNum(String obj)throws Exception{
if(obj.equals("")){
throw new Exception("账号不能为空");
}
if(obj.length()!=5){
throw new Exception("账号只能为5位");
}
}
public static void checkName(String obj)throws Exception{
if(obj.equals("")){
throw new Exception("姓名不能为空");
}
if(obj.length()>5||obj.length()<1){
throw new Exception("姓名字符在一到五位之间");
}
}
public static void checkMoney(String obj)throws Exception{
if(obj.equals("")){
throw new Exception("金钱不能为空");
}
if(obj.indexOf(".")>0&&obj.length()-obj.indexOf(".")!=3){
throw new Exception("金钱只能为两位小数");
}
}
public static void checkSex(String obj)throws Exception{
if(obj.equals("")){
throw new Exception("性格不能为空");
}
if(obj.equals("男")==false&&obj.equals("女")==false){
throw new Exception("性别只能为男或女");
}
}

public static void inputData() throws IOException{
boolean con=true;
while(con){
BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));//从控制台输入账号信息
System.out.println("账号为:"+"账户名称为:"+"金额为:"+"性别为:");
String str[]=bf.readLine().split(",");//字符串数组
String sub="end";
if(bf.readLine().contains(sub)){
ArrayList<String>list=new ArrayList<String>();
list.add("11111");
list.add("han");
list.add("23");
list.add("男");

for(int i=0;i<list.size();i++){
list.get(i);
String s=list.get(i);
RandomAccessFile fos=new RandomAccessFile("g:\\chapter7.1.txt","rw");
fos.seek(0);
fos.write(s.getBytes());
}
}
else con=false;
}

}

public static void main(String[]args) throws IOException{
AccountIo.inputData();
}
}
把你修改过的代码加讲解过程发上来,一定是要能运行的。
展开
 我来答
百度网友845f74e61
2011-12-19 · TA获得超过6929个赞
知道大有可为答主
回答量:4050
采纳率:50%
帮助的人:1622万
展开全部
public static void inputData() throws IOException {
boolean con = true;
String line = null;

RandomAccessFile fos = null;
while (con) {
fos = new RandomAccessFile("E:\\chapter7.1.txt", "rw");
BufferedReader bf = new BufferedReader(new InputStreamReader(
System.in));// 从控制台输入账号信息
System.out.println("账号为:" + "账户名称为:" + "金额为:" + "性别为:");
line = bf.readLine();
String str[] = line.split(",");// 字符串数组
String sub = "end";
// if (line.contains(sub)) {
if (!sub.equals(line)) {

for (int i = 0; i < str.length; i++) {
fos.seek(fos.length());
int len = str[i].getBytes().length;
fos.write(str[i].getBytes(), 0, len);
}
fos.write("\r\n".getBytes());
} else {
con = false;
if (fos != null) {
fos.close();
}
}
}

}

主要是这个方法有问题
1.bf.readLine().这个只能读取一次,你连用了两次,所以导致,后面不运行了。
用一个变量得到结果,然后操作变量。line = bf.readLine();
2.line.contains(sub)
这个判断不知道你是不是写反了,我觉得你是想在控制台输入end来结束。
我给成了。!sub.equals(line)
这样输入end就会结束。
3.RandomAccessFile fos这个对象你不该写在循环里,这样会创建很多个对象。
应该写在循环外,创建一次,往里写入内容。要不然你后创建的就会覆盖以前的,不能达到追加的效果。
4.fos.seek(0)不正确,这个是取得文件的大小,然后从这个位指开始写入。
改成fos.seek(fos.length());始终在文件尾写入内容。
5.fos.close();
你没有关闭流的操作,这样文件始终是被占用着的。
con = false;
if (fos != null) {
   fos.close();
}
在终止时关闭流,

就是这些问题
更多追问追答
追问
问题一:验证账户信息,验证正确后加入List,并把list写入文件,为什么我输入"end"程序还在让我继续输入呢,把list写入文件时什么意思。
22222,xiao,24,男
账号为:账户名称为:金额为:性别为:
33333,end
账号为:账户名称为:金额为:性别为:
问题二:.seek(fos.length());int len = str[i].getBytes().length;fos.write(str[i].getBytes(), 0, len);分别是什么作用?小女子刚学java 不懂得地方很多,麻烦你了!谢谢!
追答
1.只输入一个end就会结束。如果你还有别的,就不会结束
我觉得字符串中有end的判断不合理,就这样改了,如果和你的要求不符合,那就改回
if (line.contains(sub)) 这个判断吧。

2.加入list并将list写入文件,我开始以为只是将你输入的内容写入文件,如果是将List写入文件,那是将对象写入文件。那你下边用的东西就都不对路。
要用java.io.ObjectOutputStream这个对象。

3.  fos.seek(fos.length());
这个是将文件指针移到文件最后,这样再写入,就是在后面追加,如果象你一开始都设成0那就都从文件的最开始写,后面的覆盖前面的,就不对了。
后面就是循环字符串数组,因为当时我觉得list没有用。就这样改了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式