所以这是一个非常简单的问题,我只是没有看到一个简单的解决方案:
我正在尝试通过InputStream获取数据列表,循环直到我到达流的末尾。在每次迭代中,我打印通过InputStream传递的下一行文本。我有它工作,但一个小问题:我正在截断每一行的第一个字符。
以下是代码:
while (dataInputStream.read() >= 0) {
System.out.printf("%s\n", dataInputReader.readLine());
}
输出:
classpath
project
est.txt
现在,我知道这里发生了什么:我的read()
循环中的while
调用正在获取每一行的第一个字符,所以当该行传入循环时,该字符缺失。问题是,我无法弄清楚如何设置循环以防止这种情况。
我想我只需要一套新的眼睛。
答案 0 :(得分:2)
readLine
的{p> DataInputStream
。您可以尝试使用BufferedReader
包装它:
try
{
String line;
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader( dataInputStream ) );
while( (line = bufferedReader.readLine()) != null )
{
System.out.printf("%s\n", line);
}
}
catch( IOException e )
{
System.err.println( "Error: " + e );
}
此外,由于此规范,我不确定使用available()是个好主意:
* <p>Note that this method provides such a weak guarantee that it is not very useful in
* practice.
答案 1 :(得分:0)
使用一个BufferedReader
和InputStreamReader
,这是一个示例:
InputStream in=...;
BufferedReader br = new BufferedReader(new InputStreamReader(in));
while (br.ready()) {
String line = br.readLine();
}
答案 2 :(得分:0)
dataInputStream.read()
读取InputStream的第一个字符,与dataInputReader.readLine()
读取完整的下一行相同。然后每个读取的字符或行都消失了。您可以使用dataInputStream.available()
检查InputStream是否有可用数据。
这应该打印正确的输出:
while (dataInputStream.available()) {
System.out.printf("%s", dataInputReader.read());
}
答案 3 :(得分:0)
String line;
while ((line = dataInputReader.readLine()) != null) {
System.out.println(line);
}