从文件中读取然后将其放入构造函数的代码将不起作用

时间:2014-04-25 15:13:11

标签: java file java.util.scanner inputmismatchexception

我是一名大学生,我有一个java项目,我正在尝试从文件中读取并将它们放入构造函数中。我试图读取的文件是这种形式:

2 Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan 13234 12/3/1998 123 1234567891234 1234567891 engineer
2 Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan 13234 12/3/1998 123 1234567891234 1234567891 null
.
.
.
etc 

我正在尝试通过令牌从行令牌中读取令牌,并将它们中的每一个放入我的构造函数中。这是我的代码:

我知道我在编写课程时有很多流程,这是因为我大约4个月前才开始学习java编程,但我要做的是读取文件的第一行并分隔每个令牌在它我试图增强我的代码锁定这样,   文件F =新文件(“Book.txt”);

       Scanner fileInput = new Scanner (F);
       while (fileInput.hasNextLine()){
       String Line = fileInput.nextLine();      
       Scanner readLline = new Scanner(Line);    

       while(readLline.hasNext()){
       //reads line by line
       readBook.setNumOfAuthor(readLline.nextInt());
       readBook.SetAplicationTitle(fileInput.next(Line));
       String GetRedOf = fileInput.next();    
       ba.setStatus(fileInput.next()); 
       ba.setFirstName(fileInput.next()) ;
       ba.setLastName(fileInput.next());
       Adate.setDay(fileInput.nextInt());
       String GetRedOf3 = fileInput.next();
       Adate.setMonth(fileInput.nextInt());
       String GetRedOf4 = fileInput.next();
       Adate.setYear(fileInput.nextInt() ) ;
      //  String comma = fileInput.next();
       String GetRedOf2= fileInput.next();
       bb.setName(fileInput.next()); 
       bb.setAdress(fileInput.next());
       bb.setphneNumber(fileInput.next());
       publicationDate.setDay(fileInput.nextInt())  ;
       String getred = fileInput.next();
       publicationDate.setMonth(fileInput.nextInt()); 
       String getred1 = fileInput.next();
       publicationDate.setYear(fileInput.nextInt()) ;
       readBook.SetNumOfPUblication(fileInput.nextInt()); 
       readBook.setIsbn13(fileInput.next()) ;  
       readBook.setIsbn13(fileInput.next());  
       readBook.SetCatagory(fileInput.next());            





       }

请帮助我解决他的问题!

这是我遇到的错误 线程“main”java.util.NoSuchElementException中的异常     在java.util.Scanner.throwFor(Scanner.java:907)

在java.util.Scanner.next(Scanner.java:1530)

at java.util.Scanner.next(Scanner.java:1463)

at TestPublications.ReadBook(TestPublications.java:260)

at TestPublications.main(TestPublications.java:232)

Java结果:1 第260行是

readBook.SetAplicationTitle(fileInput.next(线));

4 个答案:

答案 0 :(得分:0)

第一行:

2 Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan 13234 12/3/1998 123 1234567891234 1234567891 engineer

扫描仪的工作原理如下:

int numofaouthers = fileInput.nextInt(); // 2
String SetAplicationTitle =fileInput.next(); // Sciense 
String GetRedOf = fileInput.next(); // [mr

String Status = fileInput.next(); // ali 

这里已经错了......

答案 1 :(得分:0)

Sciense [mr ali hassan  14/4/1993 ] Ali  Hhassan are not valid integer.

1.First read String

String str = readLline.next();

2. 使用Integer.parseInt()方法验证整数输入。

假设

try{
    Integer.parseInt(ste);
}
catch(NumberFormatException ex){
    System.out.println("Its not a valid Integer");
}

答案 2 :(得分:0)

InputMismatchException指示从您的文件中读取的内容与您尝试将其存储的数据类型不匹配。错误位于您的类的第258行(在编辑器中打开行号)。我怀疑它是你的一个int,你要么试图将一个字符串读入一个int,要么溢出一个int(即你读入的数字大于MAX_INT)。

另外,您应该使用小写名称作为变量名称。你编写它的方式很难从类名中告诉变量名。

以下是异常的JavaDoc:

http://docs.oracle.com/javase/7/docs/api/java/util/InputMismatchException.html

答案 3 :(得分:0)

我建议使用正则表达式并从那里提取数据。也许是这样的:

BufferedReader reader = new BufferedReader(new FileReader("input.txt"));

String regex = "([0-9]+) ([a-zA-Z]+) \\[(.+)\\].+";
Pattern pattern = Pattern.compile(regex);
Matcher matcher;

String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
    matcher = pattern.matcher(line);
    if (matcher.find()) {
        System.out.printf("1:%s 2:%s 3:%s", matcher.group(1),
                matcher.group(2), matcher.group(3));
    }
    break;
}

该示例匹配3组:

  

1:2 2:科学3:阿里哈桑先生14/4/1993

将正则表达式扩展到整行,你就完成了: - )