是否有办法让我能够使用相同的扫描仪为两个系统。在输入和FileInputStream输入?
下面是我在主类中初始化扫描器的方法:
public class Nimsys {
public static Scanner keyboardIn;
static {
keyboardIn = new Scanner(System.in);
} ...
在主类Nimsys中,我是这样获得输入的:
String inputString1 = keyboardIn.nextLine();
在另一个课程中,这里是我如何使用Nimsys的扫描仪:
int inputInt1 = Nimsys.keyboardIn.nextInt();
但是现在在我的主类Nimsys中,我试图扫描整个文件-到目前为止,我使用了另一个扫描仪,如下面的代码所示。但是,是否有可能全部由原始扫描仪完成?
try
{
inputStream = new Scanner(new FileInputStream("file.txt"));
}
catch (FileNotFoundException e)
{
System.out.println("File morestuff.txt was not found");
}
String[] reopenPlayers = new String[100];
int i = 0;
while(inputStream.hasNextLine()){
reopenPlayers[i]=inputStream.nextLine();
System.out.println(reopenPlayers[i]);
}
非常感谢!
汤姆如果我理解你的问题(不是说我认为全局变量是一个很好的解决方案),你可以改变(也许重命名)
keyboardIn = new Scanner(System.in);
变成
try {
keyboardIn = new Scanner(new FileInputStream("file.txt"));
} catch (FileNotFoundException e) {
System.out.println("file "file.txt" not found");
e.printStackTrace();
}
,然后从
中删除try-catch
inputStream = new Scanner(new FileInputStream("file.txt"));
并将其修改为
inputStream = Nimsys.keyboardIn;
(或将inputStream
替换为Nimsys.keyboardIn
,而不是强制性的,但可能将Nimsys.keyboardIn
重命名为Nimsys.in
)。希望您使用的是支持重构的IDE。
不,你不能这样做,Scanner只是一个包装类,这意味着你正在使用的实际流源是FileInputStream和system。显然你不能这么做,即使你能这么做也没有什么好处。
我建议您不要尝试对多个源使用相同的扫描程序。从你描述的代码来看,你不会从中得到任何好处。一般来说,一个Scanner应该代表一个单一的数据源。
然而,如果你对这个想法死心了,你可以编写自己的InputStream
实现,它结合了System.in
和FileInputStream
的输入。有关如何做到这一点的想法,请参阅相关问题。然后用双源InputStream
的一个实例构造这个扫描器。
这带来了许多其他的问题——你打算如何正确地结合两个来源的输入?文件内容将在文件打开后立即可用。来自System.in
的输入将在用户键入时可用。您的组合Scanner
应该如何选择输出什么以及何时输出?如果您选择编写自己的InputStream
来包装这两个源代码,那么您必须回答这些问题。