【问题标题】:java: all input streams terminate with a single ctrl+zjava:所有输入流都以单个 ctrl+z 终止
【发布时间】:2015-04-17 21:55:55
【问题描述】:

我正在做一个 Java 练习,它需要从输入和交易中连续获取客户数据,并将它们保存到两个单独的文本文件中。在运行时,它需要获取第一个文件的数据(oldMaster),然后从用户输入中获取另一个文件的(trans)。 当我使用 ctrl+z 终止第一个输入流时,下一个输入不会开始工作。这是我的代码:

import java.io.*;
import java.util.*;
public class SampleMaker {
    Formatter output1;
    Formatter output2;
    public void makeSampleOldMaster(){
        String firstName;
        String lastName;
        int accountNumber;
        double balance;

        Scanner input1=new Scanner(System.in);

        try{
         output1=new Formatter("oldmaster.txt");

         System.out.println("Enter account number,FirstName,LastName and balance");
         while(input1.hasNext()){
                accountNumber=input1.nextInt();
                firstName=input1.next();
                lastName=input1.next();
                balance=input1.nextDouble();
                output1.format("%-10d%-10s%-10s%-10.2f",accountNumber,firstName,lastName,balance);
                System.out.println("Enter account number,FirstName,LastName and balance");
            }

        }

        catch(IOException e){
            System.err.println("IO exception");
            System.exit(1);
        }

        catch(NoSuchElementException e){
            System.err.println("Invalid input");
            input1.nextLine();
        }
    }

    public void makeSampleTrans(){
        Scanner input2=new Scanner(System.in);
        double transAmount;
        int accountNumber;
        try{
        output2=new Formatter("trans.txt");
        System.out.println("Enter account number,and Transaction Amount:");
        while(input2.hasNext()){
            accountNumber=input2.nextInt();
            transAmount=input2.nextDouble();
            output2.format("%-10d%-10.2f",accountNumber,transAmount);
            System.out.println("Enter account number,and Transaction Amount:");
        }
        }
        catch(IOException e){
            System.err.println("IO exception");
            System.exit(1);
        }

        catch(NoSuchElementException e){
            System.err.println("Invalid input");
            input2.nextLine();
        }
    }

    public void closeOldMasterFile(){

        if(output1 != null){
            output1.close();
        }   
    }
    public void closeTransFile(){
        if(output2 != null){
            output2.close();
        }
    }
}

当我运行这段代码时:

public class Test {
    public static void main(String[] args){
        SampleMaker s=new SampleMaker();
        s.makeSampleOldMaster();
        s.closeOldMasterFile();
        s.makeSampleTrans();
        s.closeTransFile();

    }
}

使用 ctrl+z 结束第一个输入并启动第二个输入后,它停止工作。

【问题讨论】:

  • 任何异常或正常终止?
  • Ctrl-Z 表示 EOF(我假设这是 windows),所以你关闭标准输入。在封闭的输入流上,扫描仪不会读取任何内容吗?

标签: java io stream


【解决方案1】:

流的结束是流的结束。一旦System.in 遇到流结束,它就会将它传递给任何你可能环绕它的东西,就像你这样做的次数一样。你的设计不正确。您必须使用其他东西来分隔第一组输入。

【讨论】:

  • 感谢 EJP。您能提出任何有用的方法吗?
猜你喜欢
  • 2017-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-12-09
  • 2011-11-04
  • 2013-10-22
  • 2013-10-26
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多