我有一个正在编写的程序,正在使用另一家公司的库从他们的网站下载一些报告。我想先解析这些报告,然后再将它们写到文件中,因为如果它们符合特定条件,那么我将忽略它们。

问题是,他们的名为download()的方法返回一个java.io.Reader。我唯一可用的方法是

int read(char[] cbuf);

打印出这个返回的数组会给我毫无意义的字符。我希望能够识别正在使用的字符集或将其转换为字节数组,但是我不知道该怎么做。我试过了
//retrievedFile is my Reader object
char[] cbuf = new char[2048];
int numChars = retrievedFile.read(cbuf);
//I've tried other character sets, too
new String(cbuf).getBytes("UTF-8");

而且我害怕贬低一个更有用的读者,因为我不确定它是否会起作用。有什么建议么?

编辑

当我说它打印出“无意义的字符”时,我并不是说它看起来像乔恩·斯凯特(Jon Skeet)给出的示例。很难形容,因为我现在不在我的机器上,但是我认为这是一个编码问题。这些字符似乎具有类似于报告外观的缩进和结构。我将在星期二回来时立即尝试这些建议(我只是一名实习生,所以我不必理会设置远程帐户或其他任何事情)。

最佳答案

试试这个:

BufferedReader in = new BufferedReader(retrievedFile);
String line = null;
StringBuilder rslt = new StringBuilder();
while ((line = in.readLine()) != null) {
    rslt.append(line);
}
System.out.println(rslt.toString());

不要将Reader转换为任何类,因为您不知道它的真实类型。
而是使用BufferedReader并将Reader传递给它。并且BufferedReader以java.io.Reader的任何子类为参数,因此可以保存使用。

关于java - 从Java.io.Reader获取有意义的文本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8683943/

10-13 22:57