阻止Java中的输入

时间:2013-12-01 15:47:59

标签: java io inputstream

我是Java的新手,所以我为可能是一个非常天真的问题道歉。我正在编写一个与其他几个进程通信的应用程序。后者将从stdin和stdout读写。我想将他们的输入和输出重定向到特定于进程的文件,并从那里进行读写。

我似乎在阅读部分遇到了麻烦。特别是,如果数据尚未出现在输入文件中,则InputStream.read()似乎返回-1而不是等待它。我已经搜索了一些解决方案,我发现的所有内容似乎都表明问题在于提前关闭流。我不认为我这样做。

以下是相关代码的一些片段:

class Player {
    public Player(String Infile, String Outfile, int initBankRoll) {
           File inFile;
           File outFile;

           try {
               reader = new FileInputStream(Infile);
           }
           catch (IOException ioe) {
               System.err.println("Could not open " + Infile);  
               }
    ...
    }

    public String readln() {
       StringBuilder sb = new StringBuilder(80);
       int i;
       try {
          while ( (i = reader.read()) != '\n') {
         sb.append(i);
          }
       } catch (IOException ioe) {
          System.err.println("Could not read from file.");  
       }
    return sb.toString();
    }

对于它的价值,我宁愿有一个快速的解决方案,而不是一个优雅的解决方案。感谢任何人都能提供的帮助!

哦 - 这可能是相关的。我正在尝试通过输入来测试发送输入        猫 - > TESTFILE 在终端上......

1 个答案:

答案 0 :(得分:0)

我不知道我理解你的问题,但基本上你想要从文件读取行,如果没有其他行,你想等待它吗?正确?

如果是这样,这可能是解决方案:

public static void main(String [] args)
{
    Player player  = new Player("C:\\Data\\test.txt");
    while(true) {//do whatever condition you want here
        System.out.println("Write:");
        String line = player.readln();
        System.out.println(line);
    }
}
public class Player {
    BufferedReader bufferedReader;

    public Player(String fileName) {
        try {
            bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), Charset.forName("UTF-8")));
        }
        catch (IOException ioe) {
            System.err.println("Could not open " + fileName);
        }
    }

    public String readln() {
        String line = null;
        try {
            while(true){ //this will wait till new line in file
                if((line = bufferedReader.readLine())!= null)
                    return line;
            }
        } catch (IOException ioe) {
            System.err.println("Could not read from file.");
        }
        return line;
    }
}