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是更好的方法)。