Java 通过命令行输入一个文件

Java 通过命令行输入一个文件,java,input,args,Java,Input,Args,您好,我有一个较大程序中的这一小部分代码,它允许我使用args通过命令行输入txt文件,但它只允许输入两个txt文件,我如何使它允许一个或两个txt文件。如果您希望命令lin提供一个或两个文件,这意味着您要提供一个或两个参数。因此args.length将等于1或2。只要做一个与此对应的if public class TFIDF { public static void main (String args[]) { if (args.length < 2) {

您好,我有一个较大程序中的这一小部分代码,它允许我使用args通过命令行输入txt文件,但它只允许输入两个txt文件,我如何使它允许一个或两个txt文件。

如果您希望命令lin提供一个或两个文件,这意味着您要提供一个或两个参数。因此args.length将等于1或2。只要做一个与此对应的if

public class TFIDF {

   public static void main (String args[]) {

      if (args.length < 2)  {
         System.out.println("Use Two Files!");
      }
}

这不是一个代码问题,而是一个逻辑问题

您的意思是一个或两个文件可以,但其他任何文件都不行,因此请使用以下不等式:

if(args.length > 0 && args.length <= 2) {
    //Number of arguments correct
} else {
    //number of argument wrong
}
除了检查参数是否存在外,您可能还应该检查输入的路径,并检查文件是否存在,以及它们是否实际上是文件而不是目录。

args表示命令行中字符串数组中的每个参数,因此,正如java Main blaBla.txt test.csv中提到的,您在程序中获得了以下内容:

args[0]blaBla.txt第一个参数 args[1]=test.csv第二个参数 因此,您可以轻松地进行检查,以便进行解释:

if (args.length > 2)  {
    System.out.println("Use One or Two Files!");
    System.exit(1);
}

// getting the arguments
String pathToFile1 = null;
if(args.length >= 1)
    pathToFile1  = args[0];

String pathToFile2 = null;
if(args.length >= 2)
    pathToFile2  = args[1];

// then just be aware that a path could be null
可按如下方式进行优化:

if (args.length == 0 || args.length > 2) {
 System.out.println("please provide one or two files");
} else if (args.length == 1) {
 // got only 1 file
 // file1 = args[0]
} else {
 // args.length == 2 got 2 files
 // file1 = args[0]
 // file2 = args[1]
}
为了避免在参数正确的情况下重复分配文件1,可以这样做,例如

if (args.length == 1) {
 //got one file
} else if (args.length == 2) {
 //got two files
} else {
 //invalid arguments
}

问题是至少对我来说有点不清楚。args[]包含由空格分隔的所有给定命令行参数,这意味着当您调用java Main blaBla.txt test.csv之类的东西时,args[0]包含字符串blablabla.txt,args[1]包含字符串test.csv。因此,您可以通过简单地检查args的长度来检查是否有足够的参数,您在示例中已经做了这些工作。你到底想知道什么?你能说得更具体一点吗?听起来你好像在问如何将args.length<2更改为其他条件。是吗?@khelwood是的,这就是我想要的,这个条件只允许通过命令行使用两个txt文件,所以我希望它允许一个或两个文本文件,希望这更清楚:我试过了,但没有用,我从线程main java.lang.ArrayIndexOutOfBoundsException:1的TFIDF.mainTFIDF.java:21中的cmd异常中收到此错误,这仍然是2个文件的唯一单词。出于测试目的,我假定这些文件存在,因此它更容易运行。请使用您正在运行的命令更新问题,并添加更多代码,包括发生异常的TFIDF的第21行。@PeterToole如果参数不正确,请确保在写入错误消息后退出程序。不要访问args[1]当args.length仅为1时。指数从0开始。
if (args.length > 2 || args.length == 0) {
 //none or more arguments then supported, some fail
 System.out.println("Use One or Two Files!");
 System.exit(1);
}

if (args.length == 1) {
 //got one file or two files
 //assign first

}

if (args.length == 2) {
 //got two files
 //also got second
}