Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我会收到一个NoTouchElementException?_Java_File Io - Fatal编程技术网

Java 为什么我会收到一个NoTouchElementException?

Java 为什么我会收到一个NoTouchElementException?,java,file-io,Java,File Io,我最近开始学习FileIO,并创建了一个简单的程序,让用户输入他们的姓名和年龄。该程序编译得很好,但当我运行该程序时,会收到以下消息: Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1371) at Fi

我最近开始学习FileIO,并创建了一个简单的程序,让用户输入他们的姓名和年龄。该程序编译得很好,但当我运行该程序时,会收到以下消息:

Exception in thread "main" java.util.NoSuchElementException
        at java.util.Scanner.throwFor(Scanner.java:862)
        at java.util.Scanner.next(Scanner.java:1371)
        at FileIO.main(FileIO.java:18)
我不确定这个编译器错误是什么意思,如果有人能给我解释一下,我将不胜感激。谢谢

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

public class FileIO
{
        public static void main( String args[] )
        {
                String sourceFile = "inputfile.txt";
                String destinationFile = "outputfile.txt";
                try{

                        File sfile = new File(sourceFile);
                        Scanner input = new Scanner(sfile);

                        while(input.hasNext())
                        {
                                String fname = input.next();
                                String lname = input.next();
                                int age = input.nextInt();
                                System.out.println(fname + ' ' + lname + ", your age is: " + age);

                        }
                        input.close();

                }catch(IOException ex){
                        System.err.println(ex);
                }

        }
}

我假设您的输入中有一行是这样的:

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

public class FileIO
{
    public static void main( String args[] )
    {
            String sourceFile = "inputfile.txt";
            String destinationFile = "outputfile.txt";
            try{

                    File sfile = new File(sourceFile);
                    Scanner input = new Scanner(sfile);

                    while(input.hasNext())
                    {
                            String fname = input.next();
                            String lname = "";
                            if (input.hasNext())
                                lname = input.next();
                            int age = -1;
                            if (input.hasNext())
                                age = input.nextInt();
                            System.out.println(fname + ' ' + lname + ", your age is: " + age);

                    }
                    input.close();

            }catch(IOException ex){
                    System.err.println(ex);
            }

    }
}
乔C


在这种情况下,您对next的第一次调用将返回Joe,第二次调用将返回C。当您现在调用nextInt时,这里没有任何内容可供阅读。因此出现了NoTouchElementException。

我假设您的输入中有一行是这样的:

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

public class FileIO
{
    public static void main( String args[] )
    {
            String sourceFile = "inputfile.txt";
            String destinationFile = "outputfile.txt";
            try{

                    File sfile = new File(sourceFile);
                    Scanner input = new Scanner(sfile);

                    while(input.hasNext())
                    {
                            String fname = input.next();
                            String lname = "";
                            if (input.hasNext())
                                lname = input.next();
                            int age = -1;
                            if (input.hasNext())
                                age = input.nextInt();
                            System.out.println(fname + ' ' + lname + ", your age is: " + age);

                    }
                    input.close();

            }catch(IOException ex){
                    System.err.println(ex);
            }

    }
}
乔C


在这种情况下,您对next的第一次调用将返回Joe,第二次调用将返回C。当您现在调用nextInt时,这里没有任何内容可供阅读。因此出现了NoTouchElementException。

您可以这样更改它:

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

public class FileIO
{
    public static void main( String args[] )
    {
            String sourceFile = "inputfile.txt";
            String destinationFile = "outputfile.txt";
            try{

                    File sfile = new File(sourceFile);
                    Scanner input = new Scanner(sfile);

                    while(input.hasNext())
                    {
                            String fname = input.next();
                            String lname = "";
                            if (input.hasNext())
                                lname = input.next();
                            int age = -1;
                            if (input.hasNext())
                                age = input.nextInt();
                            System.out.println(fname + ' ' + lname + ", your age is: " + age);

                    }
                    input.close();

            }catch(IOException ex){
                    System.err.println(ex);
            }

    }
}

你可以这样改变它:

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

public class FileIO
{
    public static void main( String args[] )
    {
            String sourceFile = "inputfile.txt";
            String destinationFile = "outputfile.txt";
            try{

                    File sfile = new File(sourceFile);
                    Scanner input = new Scanner(sfile);

                    while(input.hasNext())
                    {
                            String fname = input.next();
                            String lname = "";
                            if (input.hasNext())
                                lname = input.next();
                            int age = -1;
                            if (input.hasNext())
                                age = input.nextInt();
                            System.out.println(fname + ' ' + lname + ", your age is: " + age);

                    }
                    input.close();

            }catch(IOException ex){
                    System.err.println(ex);
            }

    }
}

你的程序运行得很好

确保inputfile.txt类似于:

String
String
int
并存在于工作目录中。要查找工作目录,可以将以下内容添加到代码中:

System.out.println("Working Directory = " +  System.getProperty("user.dir"));

你的程序运行得很好

确保inputfile.txt类似于:

String
String
int
并存在于工作目录中。要查找工作目录,可以将以下内容添加到代码中:

System.out.println("Working Directory = " +  System.getProperty("user.dir"));

看起来你需要在每一步之间做下一步。你能发布你的文本吗?是你的inputfile.txt有错误,检查你是否有三个数据,比如String fname,String lname,int age。错误就要来了,因为你没有任何一个字段,而且主要是年龄。看起来你需要在每个字段之间执行hasNext。你能发布你的文本吗?是你的inputfile.txt有错误,检查你是否有三个数据,比如String fname,String lname,int age。出现错误是因为您没有任何字段,而且大部分字段都是age。如果是这种情况,那么它将抛出java.util.InputMismatchException。如果我们试图读取的数据在文件中不存在,则不会发生NoTouchElementException。@Rishal如果下一个在nextInt读取的数据不是整数,例如London,则会出现InputMismatchException。当没有东西可读时,就会出现一个NosTouchElementException。@JoeC这正是我想说的:@Chynna:如果你觉得这个答案很有用,请不要忘记将它标记为已被接受的答案,以方便将来遇到类似问题的人。如果是这样的话,它将抛出java.util.InputMismatchException。如果我们试图读取的数据在文件中不存在,则不会发生NoTouchElementException。@Rishal如果下一个在nextInt读取的数据不是整数,例如London,则会出现InputMismatchException。当没有什么东西可读时,就会出现一个无趣的例外情况。@JoeC这就是我想说的:@Chynna:如果你觉得这个答案很有用,请不要忘记把它标记为公认的答案,以利于那些将来面临类似问题的人。