gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:53:23 25 4
gpt4 key购买 nike

我用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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com