IBM Host On Demand Macro(HAScript)报错:Scanner无hasNextInt方法
解决IBM Host On Demand Macro读取整数列表的问题
你遇到的报错核心原因是HAScript对Java类的方法支持有局限,java.util.Scanner的hasNextInt()方法不在它允许直接调用的范围内。换用更基础的Java IO类就能绕开这个问题,比如BufferedReader配合FileReader,下面给你具体的XML脚本示例:
<HAScript name="ReadIntegers" description="" timeout="60000" pausetime="300" promptall="true"> <import>java.io.BufferedReader</import> <import>java.io.FileReader</import> <import>java.io.IOException</import> <vars> <!-- 替换成你的实际文件路径,Windows路径要转义反斜杠 --> <var name="filePath" type="STRING" value="C:\\your_folder\\integers.txt"/> <var name="currentLine" type="STRING"/> <var name="currentInt" type="INT"/> <var name="reader" type="OBJECT"/> </vars> <actions> <!-- 创建文件读取对象 --> <createobject objectname="reader" classname="java.io.BufferedReader"> <arg> <createobject classname="java.io.FileReader"> <arg>%filePath%</arg> </createobject> </arg> </createobject> <!-- 循环读取文件每一行 --> <while condition="%reader.readLine() != null%"> <assign to="currentLine" from="%reader.readLine()%"/> <!-- 将读取到的字符串转为整数(假设每行一个整数) --> <assign to="currentInt" from="Integer.parseInt(%currentLine%)"/> <!-- 这里替换成你要执行的对应操作 --> <message title="当前处理整数" value="%currentInt%"/> </while> <!-- 关闭文件流,避免资源泄漏 --> <try> <callobject objectname="reader" methodname="close"/> </try> <catch type="java.io.IOException"> <message title="错误" value="关闭文件失败"/> </catch> </actions> </HAScript>
额外调整说明
如果你的文本文件是空格分隔的整数(比如一行写多个:10 20 30),可以把读取逻辑改成这样:
<assign to="currentLine" from="%reader.readLine()%"/> <!-- 按空格拆分字符串成数组 --> <assign to="numArray" from="%currentLine.split(" ")%"/> <!-- 遍历数组逐个转整数 --> <forloop counter="i" start="0" end="%numArray.length - 1%" step="1"> <assign to="currentInt" from="Integer.parseInt(%numArray[i]%)"/> <!-- 执行你的操作 --> <message title="当前处理整数" value="%currentInt%"/> </forloop>
内容的提问来源于stack exchange,提问作者kingspistol
相关产品推荐
相关产品推荐

