Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.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 在try块之后找不到变量_Java_Exception_Exception Handling - Fatal编程技术网

Java 在try块之后找不到变量

Java 在try块之后找不到变量,java,exception,exception-handling,Java,Exception,Exception Handling,我试图处理用户输入的文件中的文本,但在中编译时找不到扫描仪。我猜它被抓住了。我能做些什么来让它工作 String namef = getf.nextLine(); File inPut = new File(namef); try { Scanner in = new Scanner(inPut); } catch (FileNotFoundException e) { System.out.println("file

我试图处理用户输入的文件中的文本,但在中编译时找不到扫描仪。我猜它被抓住了。我能做些什么来让它工作

String namef = getf.nextLine();
File inPut = new File(namef);

try { 
    Scanner in = new Scanner(inPut);                            
}
catch (FileNotFoundException e) {
    System.out.println("file not found");
}

while(in.hasNextLine()) {  // process file
    String line = in.nextLine();
    String pLine = parse(count,  namef);
}

@汤姆是对的。您必须在try块之外声明扫描仪

     String namef = getf.nextLine();
     Scanner in = new Scanner();  

     File inPut = new File(namef);                                    
     try
     { 
       in = new Scanner(inPut);  
       while(in.hasNextLine())       // process file
       {
         String line = in.nextLine();
         String pLine = parse(count,  namef);
       }                          
     }
     catch (FileNotFoundException e)
     {
       System.out.println("file not found");
     }

你知道“变量作用域”吗?如果没有,请查找。中的
仅在
try{}
范围内可用。因此,移动
,同时将
循环也移动到解决方案脆弱的块中。如果找不到该文件,此代码将生成
NullPointerException
。因此,最好将while循环移动到try块中(如果找不到文件,则跳过其执行)。此外,流的关闭丢失。一个优雅的解决方案是尝试使用参考资料
try(Scanner in=new Scanner(inPut)){…
,它会在try块后自动关闭流。感谢大家提供的信息,我非常感谢itAs,因为我指出:使用
try(Scanner in=new Scanner(inPut)){…}
(Java8)编译器负责关闭。使用这段代码,声明也可以在try块内(尽管try with resources是更好的方法)。