android - 从谷歌驱动器读取word文件时获取特殊字符
问题描述
我正在尝试将 google drive word 文件本地存储到设备。下面的代码可以做到这一点,但是对于某些(.doc)word 文件会获取特殊/ascii 字符。
InputStream inputStream = mActivity.getContentResolver().openInputStream(uri);
BufferedReader reader = new BufferedReader(new InputStreamReader(
inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line;
// FileInputStream fis;
// fis = ((Activity)mActivity).openFileInput("test.txt");
mTempFile = File.createTempFile("file", ".doc");
FileOutputStream fos = new FileOutputStream(mTempFile);
// FileOutputStream fos = ((Activity)mActivity).openFileOutput("resume.doc", Context.MODE_PRIVATE);
while ((line = reader.readLine()) != null) {
stringBuilder.append(line);
}
fos.write(stringBuilder.toString().getBytes());
fos.flush();
fos.close();
reader.close();
有些文件被正确读取,但有些则没有。我的意图是将文件下载到设备并使用 REST API 作为 Multipart 文件将其发送到服务器。
非常感谢任何避免特殊字符的帮助。
解决方案
不要使用(缓冲)阅读器。
不要使用 readLine()。
不要使用 StringBuilder。
它们仅适用于纯文本文件。.doc 不是纯文本。
干掉他们。
只需循环从输入流中读取一大块字节,然后直接将它们保存到文件输出流中。
推荐阅读
- c - 为什么在使用带有结构值的 malloc 时 -Wsign-conversion 编译器警告?
- django - Django注册后无法登录用户
- wcf - 根据 WCF 服务中发布的 xml 内容识别操作,而不在 Url 中包含操作名称
- amazon-web-services - 如何将 SAM(无服务器应用程序模型)模板中的 CRUD 策略定义为多个表以用于 lambda 函数?
- c# - 将自定义主键列添加到身份用户表
- python - tensorflow deeplabv3+ 从头开始训练 train.sh 代码到 VOC val 中重复出现 82.2%
- java - Volley 的 onResponse() 未被调用(代码运行正常但有时不起作用)
- azure - 如何在 azure 中使用 arm 模板将 RBAC 分配给多个用户
- google-sheets - 如何在一个查询中引用来自两个不同工作表的两列
- java - 如何从本机文件描述符创建 ParcelFileDescriptor?