我在
上遇到了日食红色下划线错误 br = new BufferedReader(new FileReader(inFile));
在“inFile”上排队。这是我想要阅读的对象,我认为它包含我在命令行上给出的命令行文件名/路径。我处理这个错误吗?
import java.io.File;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
if (0 < args.length) {
File inFile = new File(args[0]);
}
BufferedReader br = null;
try {
String sCurrentLine;
br = new BufferedReader(new FileReader(inFile));
while ((sCurrentLine = br.readLine()) != null) {
System.out.println(sCurrentLine);
}
}
catch (IOException e) {
e.printStackTrace();
}
finally {
try {
if (br != null)br.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
答案 0 :(得分:6)
改变这个:
if (0 < args.length) {
File inFile = new File(args[0]);
}
到此:
File inFile = null;
if (0 < args.length) {
inFile = new File(args[0]);
} else {
System.err.println("Invalid arguments count:" + args.length);
System.exit();
}
因为在file
语句之外无法访问if/else
变量。
我已在else
中添加(对于没有提供args
的情况)添加一条友好消息,说明参数计数无效并退出该程序。
答案 1 :(得分:1)
inFile在if语句中声明。因此,它的范围在第11行结束;
答案 2 :(得分:1)
变量inFile
失去了if块之外的范围:
if (0 < args.length) {
File inFile = new File(args[0]);
}
更改为:
File inFile = null;
if (0 < args.length) {
inFile = new File(args[0]);
// Make sure the file exists, can read, etc...
}
else
{
// Do something if a required parameter is not provided...
}
答案 3 :(得分:1)
您的变量inFile
是包含if块的本地变量。
也许这就是:
public static void main(String[] args) {
File inFile = null;
if (0 < args.length) {
inFile = new File(args[0]);
}
答案 4 :(得分:0)
在'if'语句块之后,您可以将“inFile”的内容转储到Scanner对象。
Scanner scannedIn = new Scanner(inFile);
然后使用'.next'方法验证您是否正在访问该文件。
System.out.println(scannedIn.next());