我是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 在终端上......
答案 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;
}
}