2

我收到日食红色下划线错误

 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();
            }
        }
    }
}
4

5 回答 5

7

改变这个:

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提供的情况下)添加了一条友好的消息,说明参数计数无效并退出程序。

于 2013-05-28T22:00:39.927 回答
1

inFile 在 if 语句中声明。因此,它的范围在第 11 行结束;

于 2013-05-28T22:00:28.850 回答
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...
  }
于 2013-05-28T22:01:30.377 回答
1

您的变量 ,inFile是包含 if 块的本地变量。

也许是这样:

 public static void main(String[] args) {
      File inFile = null;

      if (0 < args.length) {
          inFile = new File(args[0]);
      }
于 2013-05-28T22:03:08.640 回答
0

在“if”语句块之后,您可以将“inFile”的内容转储到 Scanner 对象。

Scanner scannedIn = new Scanner(inFile);

然后使用“.next”方法验证您是否正在访问该文件。

System.out.println(scannedIn.next());
于 2015-12-09T17:49:33.680 回答