有一种方法让我能够使用相同的扫描仪为两个系统.在输入和FileInputStream输入



是否有办法让我能够使用相同的扫描仪为两个系统。在输入和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.inFileInputStream的输入。有关如何做到这一点的想法,请参阅相关问题。然后用双源InputStream的一个实例构造这个扫描器。

这带来了许多其他的问题——你打算如何正确地结合两个来源的输入?文件内容将在文件打开后立即可用。来自System.in的输入将在用户键入时可用。您的组合Scanner应该如何选择输出什么以及何时输出?如果您选择编写自己的InputStream来包装这两个源代码,那么您必须回答这些问题。

相关内容

  • 没有找到相关文章

最新更新