我正在使用一个InputStream来读取一些数据,我想读取字符直到换行或'\n'为止。
InputStream是一个通用的字节输入流,不限于任何特定的实现或任何来源(如文件)。
InputStream是一个通用的字节输入流,不限于任何特定的实现或任何来源(如文件)。
如果你从文件中读取内容,应该使用FileInputStreamReader
和BufferedReader
BufferedReader reader = new BufferedReader(new FileInputStreamReader(pathToFile));
如果您从任何其他 InputStream
中读取,则可以使用 InputStreamReader
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
然后在循环中使用它的readLine()方法
while(reader.ready()) {
String line = reader.readLine();
}
但是如果您真的喜欢InputStream,那么可以使用类似以下循环的方式
InputStream stream;
char c;
String s = "";
do {
c = stream.read();
if (c == '\n')
break;
s += c + "";
} while (c != -1);
new BufferedReader(new InputStreamReader(new FileInputStream("path/to/file"), "UTF8"));
。 - Tommaso PasiniFileInputStreamReader
不存在。
(2) while (reader.ready())
是无效的。ready()
不是用来测试流结束的方法,正如 Javadoc 中明确说明的那样。正确的测试方法是 while ((line = reader.readLine()) != null)
。这段代码在流结束之前是完全能够停止的。回答是未经测试的胡言乱语。 - undefinedtry-with
块中使用BufferedReader
,它会在使用完资源后自动关闭。try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
while (reader.ready())
是无效的。ready()
不是一个用于测试流结束的方法。正确的测试方法是 while ((line = reader.readLine()) != null)
。这段代码在流结束之前是完全能够停止的。 - undefined对于文件,下面的代码将让您逐行读取:
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.io.File;
public static void readText throws FileNotFoundException(){
Scanner scan = new Scanner(new File("filename.txt"));
while(scan.hasNextLine()){
String line = scan.nextLine();
}
}
var scan = new Scanner(InputStream source)
。 - Kongval scan = Scanner(inputstream)
解决了我的问题,可以读取分块的 HTTP 响应。 - rwstScanner
中没有任何关于 HTTP 分块的信息。我想删除 reader.ready()
才是真正的解决办法。 - undefined
BufferedReader
和其readLine
方法。重复问题:http://www.stackoverflow.com/questions/5868369/how-to-read-a-large-text-file-line-by-line-using-java - Tunaki