Java - 我想从命令行读取文件名,然后使用bufferedreader读取每一行

时间:2013-05-28 21:56:44

标签: java command-line bufferedreader

我在

上遇到了日食红色下划线错误
 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();
            }
        }
    }
}

5 个答案:

答案 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());