Java—我想从命令行读取一个文件名,然后使用bufferedreader读取每一行
我在屏幕上看到一个eclipse红色下划线错误Java—我想从命令行读取一个文件名,然后使用bufferedreader读取每一行,java,command-line,bufferedreader,Java,Command Line,Bufferedreader,我在屏幕上看到一个eclipse红色下划线错误 br = new BufferedReader(new FileReader(inFile)); “填充”上的行。这是我想读的对象,我相信它包含我在命令行中给出的命令行文件名/路径。我处理错了吗 import java.io.File; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Main
br = new BufferedReader(new FileReader(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();
}
}
}
}
导入java.io.File;
导入java.io.BufferedReader;
导入java.io.FileReader;
导入java.io.IOException;
公共班机{
公共静态void main(字符串[]args){
如果(0<参数长度){
文件填充=新文件(args[0]);
}
BufferedReader br=null;
试一试{
弦电流线;
br=新的BufferedReader(新文件读取器(infle));
而((sCurrentLine=br.readLine())!=null){
System.out.println(sCurrentLine);
}
}
捕获(IOE异常){
e、 printStackTrace();
}
最后{
试一试{
如果(br!=null)br.close();
}捕获(IOEX异常){
例如printStackTrace();
}
}
}
}
填充在if语句中声明。因此,其范围在第11行结束 改变这一点:
if (0 < args.length) {
File inFile = new File(args[0]);
}
if(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 infle=null;
如果(0<参数长度){
infle=新文件(args[0]);
}否则{
System.err.println(“无效参数计数:“+args.length”);
系统退出();
}
因为在if/else
语句之外无法访问文件
变量
我在
else
(对于未提供参数的情况)中添加了一条友好消息,表示参数计数无效并退出程序。变量infle
失去了if块之外的作用域:
if (0 < args.length) {
File inFile = new File(args[0]);
}
if(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...
}
File infle=null;
如果(0<参数长度){
infle=新文件(args[0]);
//确保文件存在、可以读取等。。。
}
其他的
{
//如果未提供所需参数,请执行某些操作。。。
}
您的变量infle
,是包含if块的本地变量
也许这是:
public static void main(String[] args) {
File inFile = null;
if (0 < args.length) {
inFile = new File(args[0]);
}
publicstaticvoidmain(字符串[]args){
文件填充=null;
如果(0<参数长度){
infle=新文件(args[0]);
}
在“if”语句块之后,可以将“infle”的内容转储到扫描仪对象
Scanner scannedIn = new Scanner(inFile);
然后使用“.next”方法验证您正在访问该文件
System.out.println(scannedIn.next());
在main
方法的}
之前的if
的if blockclose}
之外声明infle,因此添加else语句现在为infle提供了更大的范围?或者您这样做只是为了让用户更好地了解args错误?不,在if/else
语句之外定义infle
可以提供更大的范围(范围在main
方法中)非常好,谢谢。我想你现在可以去掉if语句中的“File”,因为你已经在if之外声明了infle,除此之外,我认为这是好的。正确的,没有解决这个问题。干杯!:)注意,必须注意所讨论的文件变量的作用域和相关的同步注意事项。将封装方法限制为最佳实践。