我在从命令行读取文件时遇到了一些麻烦。 我之前从未使用过命令行参数,所以我猜我有点失落。 这是我到目前为止所做的:
FileInputStream fin1 = null;
for (int i = 0; i < args.length; i++) //command line argument for file input
{
fin1 = new FileInputStream(args[i]);
}
//Scanner scan = new Scanner(fiin1);
我已经注释掉了我的扫描仪,因为我使用了一种不同的方法(我将其作为参数传入fin1),并且该方法中有一个扫描仪。但是,我不太确定我是否仍然需要那里的扫描仪(可能作为参数传递给另一种方法)。
无论如何,如果我运行我的代码,我会得到一个NullPointerException,我认为这是因为我将FileInputStream初始化为null。但是如果我在for循环中改变它,那为什么重要呢? 此外,我需要保持我的主要方法,所以我可以在其中做更多。
有人可以帮忙吗?
答案 0 :(得分:0)
请注意,它被称为 File InputStream,因此我们需要使用File。
您只需使用扫描仪,并将其设置为System.in
:
Scanner scanner = new Scanner(System.in);
之后,您可以初始化FileInputStream
How to Read Strings from Scanner in console Application JAVA?
答案 1 :(得分:0)
使用以下代码。
if (args.length < 1) {
System.out.println("No file was given as an argument..!");
System.exit(1);
}
String fileName = args[0];
Scanner scanner = new Scanner(new File(fileName));
如果您想使用FileInputStream
,请更改最后一行以创建FileInputStream
个实例。
fin1 = new FileInputStream(fileName);
如果您只提供一个文件名作为参数,则无需使用for-loop
。您可以按照以下方式运行代码。
javac MyClass.java //Compile your code(Assumed that your file is MyClass.java
java MyClass filename //Change filename with the path to your file
您可能因为在运行NullPointerException
代码时没有使用filename作为参数而获得java
。
答案 2 :(得分:0)
首先:当你运行你的代码时,你只会到达最后一个参数。 你应该这样做:
FileInputStream fileInputStream = null;
for (String argument : args) {
fileInputStream = new FileInputStream(argument);
//you should process your argument in block together with creating fis
Scanner scanner = new Scanner(fileInputStream);
//now, when a scanner copy is created, you can use it (or you can use your own
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
}