我正在编写一个程序,我正在使用其他公司的库从他们的网站下载一些报告.我想在将这些报告写入文件之前解析这些报告,因为如果它们符合某些条件,我想忽略它们.
问题是,他们的方法叫做download(),返回一个java.io.Reader.唯一可用的方法是
int read(char[] cbuf);
Run Code Online (Sandbox Code Playgroud)
打印出这个返回的数组会给我带来无意义的字符.我想能够识别我正在使用的字符集或将其转换为字节数组,但我无法弄清楚如何做到这一点.我试过了
//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");
Run Code Online (Sandbox Code Playgroud)
而且我害怕向一个更有用的读者倾斜,因为我无法确定它是否会起作用.有什么建议?
当我说它打印出"毫无意义的人物"时,我并不是说它看起来像Jon Skeet给出的例子.这很难描述,因为我现在不在我的机器上,但我认为这是一个编码问题.字符似乎具有与报告外观类似的缩进和结构.我星期二回来后会立即尝试这些建议(我只是一名实习生,所以我没有费心设置远程帐户或任何东西).
eva*_*ong 17
试试这个:
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());
Run Code Online (Sandbox Code Playgroud)
不要将Reader强制转换为任何类,因为您不知道它的真实类型.而是使用BufferedReader并将Reader传递给它.并且BufferedReader将java.io.Reader的任何子类作为参数,因此保存以使用它.
打印出来char[]本身可能会给您类似的东西:
[C@1c8825a5
Run Code Online (Sandbox Code Playgroud)
这只是调用的正常输出toString一对char在Java数组。听起来您想将其转换为String,可以使用String(char[])构造函数来完成。这是一些示例代码:
public class Test {
public static void main(String[] args) {
char[] chars = "hello".toCharArray();
System.out.println((Object) chars);
String text = new String(chars);
System.out.println(text);
}
}
Run Code Online (Sandbox Code Playgroud)
在另一方面,java.io.Reader 不具有read方法返回一个char[]-它具有在一个时间,其要么返回单个字符,或(更有效)的方法接受一个char[]填补用数据,和数据读出返回量。这实际上就是您的示例代码显示的内容。您只需要使用char数组和读取的字符数来创建new String。例如:
char[] buffer = new char[4096];
int charsRead = reader.read(buffer);
String text = new String(buffer, 0, charsRead);
Run Code Online (Sandbox Code Playgroud)
但是,请注意,它可能不会一次返回所有数据。您可以使用逐行阅读BufferedReader,也可以循环获取所有信息。番石榴在其CharStreams类中包含有用的代码。例如:
String allText = CharStreams.toString(reader);
Run Code Online (Sandbox Code Playgroud)
要么
List<String> lines = CharStreams.readLines(reader);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11653 次 |
| 最近记录: |