java - 从命令行传递数组参数而不是java中的扫描仪

标签 java arrays eclipse command-line-arguments argument-passing

我用Java编写代码以通过扫描仪获取参数。我有几个类:ChartToHtml.java、ExecutionProperties.java、ExecutionV2.java、TestCase.java、TestCaseList.java、Section.java,所有这些都将从 ImplTest.java 调用。

当我通过扫描仪从 eclipse 或命令行执行时,它们工作正常。问题是当我想通过程序参数执行它们并在一行中传递参数时。它将输入视为单个 String 但我必须使用 String[] 作为部分类的输入。

这是我的Section类和ImplTest类

public class Section {
     Ini.Section root;
     ArrayList<String> StringList = new ArrayList<String>();
     ArrayList<TestCase> TCList = new ArrayList<TestCase>();
     String sectionSearched;
     String section;
     String filenameSearched;

     public Section (){

     }

     public Section (String filenameSearched, String sectionSearched) {
         this.sectionSearched = sectionSearched;
         this.filenameSearched = filenameSearched;
     }

      public ArrayList<String> findSection(String filename, String... wanted) throws IOException, IOException {
             Ini myIni = new Ini(new File (filename));
            for (String d : wanted) {
                root = myIni.get(d);

                    for (String name : root.keySet()){
                        StringList.add(root.get(name));
                    }
              }
              return StringList;
      }     

      public ArrayList<TestCase> convertStringToTestCase(ArrayList<String>StringList){
          for ( int i = 0; i < StringList.size(); i++) {
              String name = StringList.get(i) ;
              TestCase tc = new TestCase (name);
              TCList.add(tc);
          }
          return TCList;
      }
      public String[] getSection(int NumOfSec){
          Scanner scanner = new Scanner(System.in);
          while (true) {
              System.out.println("Input section name:");
              section = scanner.nextLine();
              for (int i =0; i<NumOfSec; i++){
                  String token[]= section.split(" ");
                  System.out.println(Arrays.toString(token));
                    return token;
              }

          }
      }     
}

我的主课

public class ImplTest {

public static void main(String[] args) throws IOException, ConfigurationException, TemplateException {
    ExecutionV2 ex = new ExecutionV2();
    TestCaseList tc = new TestCaseList();
    Section s = new Section();
    ChartToHtml chr= new ChartToHtml();
    ExecutionProperties ep = new ExecutionProperties();
    ImplTest imp = new ImplTest();

    String filename = ex.getcfg();
    String []sec = ex.getSection();
    int it = ex.getIterationMax();
    String runTCpath =ex.getRunTCdir();
    String dir = chr.getChartDir();

    ArrayList<TestCase> TClist = s.convertStringToTestCase(s.findSection(filename, sec));
    ex.executeTestCaseList(TClist, it , runTCpath);
    ex.getTCAttribute(TClist);

    ep.setConfigProperties(tc.getTCPassed(), tc.getTCFailed());
    chr.generateHistoryTable();
    chr.generateChartAndTableTemplate(tc.getTCPassed(), tc.getTCFailed(),ex.getNameList(), ex.getPassedList().toString(), ex.getItList().toString(),dir);
    }
}

然后我修改了主类以通过运行配置传递参数并传递这一行:

ArrayList<TestCase> TClist = s.convertStringToTestCase(s.findSection(**args[0]**, **args[1]**));
    ex.executeTestCaseList(TClist, Integer.parseInt(**args[2]**) ,  **args[3]**);
    ex.getTCAttribute(TClist);

    ep.setConfigProperties(tc.getTCPassed(), tc.getTCFailed());
    chr.generateHistoryTable();
    chr.generateChartAndTableTemplate(tc.getTCPassed(), tc.getTCFailed(),ex.getNameList(), ex.getPassedList().toString(), ex.getItList().toString(), **args[4]**);

并将这一行传递给程序参数

C:\\Users\\syuniyar\\.EasyTest\\4\\ccl\\config\\test2.cfg 12346 5 C:\\EasyTest\\4\\bin\\runTC.exe C:\\Users\\syuniyar\\EclipseWS\Test3\\chart.html

它工作正常。但是,当我将输入从 ...12346... 修改为 ...12346 12345... 时,出现以下错误:

Exception in thread "main" java.io.IOException: Cannot run program "5": CreateProcess error=2, The system cannot find the file specified

我也尝试使用 VM 参数,但 System.getProperty() 的选项仅适用于单个字符串。 我知道为什么会出现此错误,因为它将 12345 读作“it”,这是不正确的。我想问的是:

是否可以在 main 方法中使用数组作为单个参数?

最佳答案

直接回答您的问题,“是否可以在 [a] main 方法中将数组作为 [a] 单个参数?”,不。 main 方法接受 String 对象数组形式的参数(通常称为“args”)。这些字符串中的每一个都被视为一个参数。

从命令行执行 main 方法时,这些参数位于程序名称之后,并以空格分隔。它们被加载到一个数组中并传递到 main 方法中。

正如评论中提到的(特别是@Ismail Kuruca),如果将多个字符串作为一个参数传递对您来说很重要,您可以连接这些字符串,使您的参数在技术上成为一个字符串,从而将其视为一个参数。

关于java - 从命令行传递数组参数而不是java中的扫描仪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30080870/

相关文章:

php - 如何在 php 中组合 2 个关联数组,这样我们就不会在所有情况下覆盖任何重复的条目?

Android 导出给一个 "Conversion to Dalvik format failed error1"

java项目在windows 10上完美运行,但在centos 7上运行不佳

Eclipse (CDT) 项目默认值

java - 设置数学函数的格式

java - 即使在 persistence.xml 中指定,JPA 2.1 也不会从 .sql 文件插入行

java - 我不想在 Eclipse 的 servlet 中使用 @WebServlet

java - 液体碱 'validation only mode'

arrays - 包含 (0,L) 且条件 A[i] > A[R] 的数组总和

python - 以向量化方式计算数组切片上的函数