程序无法从文件读取并保存到变量

时间:2013-10-16 07:19:11

标签: java file variables

当我运行我的代码时,它说有一个InputMismatchException?适用于两个第一个读取行,但hwne我尝试读取int和双行它没有和字符串行实际上没有读取任何变量,它是空的,因为它不打印任何东西在system.out.println(a + b)......任何提示?

import java.util.*;
import java.io.*;

class Uke55{
    public static void main(String[]args){
    Scanner input=new Scanner(System.in);
    try{
        PrintWriter utfil=new PrintWriter(new File("minfil55.txt"));
        utfil.println('A');
        utfil.println("Canis familiaris betyr hund");
        utfil.println(15);
        utfil.printf("%.2f", 3.1415);
        utfil.close();
    }catch(Exception e){
        e.printStackTrace();
    }
    try{
        Scanner innfil=new Scanner(new File("minfil55.txt"));
        char a=innfil.next().charAt(0);
        String b=innfil.nextLine();
        System.out.println(a +b);
        int c=(int)innfil.nextInt();
        double d=(double)innfil.nextDouble();
        innfil.close();
    }catch(Exception e){
        e.printStackTrace();
    }
    }
}

4 个答案:

答案 0 :(得分:1)

那是因为当你使用next(),nextInt()和nextDouble()时,它不会转到新行。 只有newLine()将光标移动到下一行。执行此操作:

try{
    Scanner innfil=new Scanner(new File("minfil55.txt"));
    char a=innfil.nextLine().charAt(0); //first error was here. calling next() only
                                        //read A and not the \r\n at the end of the 
                                        //line. Therefore, the line after this one was 
                                        //only reading a newline character and the 
                                        //nextInt() was trying to read the "Canis" line.
    String b=innfil.nextLine(); 
    System.out.println(a +b);
    int c=(int)innfil.nextInt(); 
    innfil.nextLine(); //call next line here to move to the next line.
    double d=(double)innfil.nextDouble();
    innfil.close();
}
catch(Exception e){
    e.printStackTrace();
}

next(),nextInt(),nextDouble(),nextLong()等...都在任何空格(包括行尾)之前停止。

答案 1 :(得分:0)

那是因为你有文件:

A\n
Canis familiaris betyr hund\n
15\n
3.14

\n表示新行字符。

第一次来电时

innfil.nextLine().charAt(0)

它读取A,扫描仪读数指向第一个\n

然后你打电话

innfil.nextLine()

它会一直读到\nnextLine()读到\n并将扫描仪读数指针移过\n),并使读数指针超过\n。读指针位于下一行的C

然后你打电话

innfil.nextInt()

杜!扫描仪无法将Canis识别为整数,输入不匹配!

答案 2 :(得分:0)

根据 Scanner.nextLine() 的文件,它 “使此扫描程序超过当前行,并返回跳过的输入。

因此,在调用char a=innfil.next().charAt(0);之后,“光标”位于第一行的末尾。调用String b=innfil.nextLine();读取直到当前行的末尾(没有任何内容可读),然后前进到下一行(实际的String所在的位置)。

<强>解决方案
在调用String b=innfil.nextLine();之前,您需要前进到下一行:

...
char a=innfil.next().charAt(0);
innfil.nextLine();
String b=innfil.nextLine();
...

注意 的:
虽然 Scanner.nextInt() Scanner.nextDouble() 的行为方式与 Scanner.next() 相同,但您不会面临同样的问题,因为这些方法将读取下一个完整的标记(其中“一个完整的标记前面跟着与分隔符模式相匹配的输入”)和空白字符(例如换行符)被认为是分隔符。因此,如果需要,这些方法将自动前进到下一行,以便找到下一个完整令牌

答案 3 :(得分:-1)

您是否检查过某些内容实际写入您的文件?我不信。在关闭PrintWriter之前尝试调用flush()。编辑:对不起,我错了,因为我在考虑自动线冲洗。