Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java—我想从命令行读取一个文件名,然后使用bufferedreader读取每一行_Java_Command Line_Bufferedreader - Fatal编程技术网

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

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

我在屏幕上看到一个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 {

     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,除此之外,我认为这是好的。正确的,没有解决这个问题。干杯!:)注意,必须注意所讨论的文件变量的作用域和相关的同步注意事项。将封装方法限制为最佳实践。