我可以从内容类型为text/plain
的文件中获取内容,但不能获取内容类型为application/msword
和application/pdf
的内容。
有没有办法获取内容并正确阅读?以下是与内容类型完美配合的代码:text/plain
HttpResponse resp = service.getRequestFactory()
.buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
BufferedReader output = new BufferedReader(new InputStreamReader(resp.getContent()));
System.out.println("Shorten Response: ");
for (String line = output.readLine(); line != null; line = output.readLine()) {
System.out.println(line);
}
答案 0 :(得分:1)
我使用了tika解析器,在我的情况下它的工作。 Plz检查代码片段: -
HttpResponse resp = service.getRequestFactory().
buildGetRequest(new GenericUrl(file.getDownloadUrl())).execute();
Detector detector = new DefaultDetector();
Parser parser = new AutoDetectParser(detector);
Metadata metadata = new Metadata();
InputStream input = TikaInputStream.get(resp.getContent());
ContentHandler handler2 = new BodyContentHandler(
Integer.MAX_VALUE);
parser.parse(input, handler2, metadata, new ParseContext());
String text = handler2.toString();
我使用了tika-app-1.3.jar。它使用.pdf,.doc .docx,.text等文件。 谢谢大家的回复。
答案 1 :(得分:0)
我认为PDF和MSWORD格式都是二进制流,因此不能逐行阅读。尝试将它们读入byte []缓冲区。
com.google.api.services.drive.Drive svc;
InputStream is = svc.getRequestFactory()
.buildGetRequest(new GenericUrl("xxx")).execute().getContent();
public byte[] strm2Bytes(InputStream is) {
ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
byte[] buffer = new byte[2048];
BufferedInputStream bufIS = null;
if (is != null) try {
bufIS = new BufferedInputStream(is);
int cnt = 0;
while ((cnt = bufIS.read(buffer)) >= 0) {
byteBuffer.write(buffer, 0, cnt);
}
} catch (Exception e) {}
finally { try { if (bufIS != null) bufIS.close(); } catch (IOException e) {}}
return byteBuffer.toByteArray();
}
但是你得到一个原始文件字节,我真的不知道你想用它做什么。兑换?显示?通常,这些字节缓冲区可以传递给解码器' (word阅读器,pdf阅读器,jpeg解码器,....)。但同样,这些读/解码器通常直接接受InputStream,因此不需要对它们进行字节缓冲。