Проверка и чтение файла Word на Android
Я хочу иметь доступ к текстовому файлу в SD-карте пользовательского телефона, и файл будет выбран пользователем. Я хочу иметь возможность обрабатывать файл, т.е. Читать его содержимое и изменять его по желанию пользователя и сохранять его, когда пользователь нажимает "сохранить".
Возможно ли это в Android? Как я могу заставить программу понять, что файл является файлом Word?
Обратите внимание, что я не хочу просматривать файл Word. Пользователь выберет файл Word, и мое приложение сможет внести в него некоторые изменения и сохранить его.
Ответы
Ответ 1
Простейшим способом IMHO является перенос библиотека Apache POI на Android. Это возможно, и доказательство этого
Портируя POI, вы можете встраивать функцию редактирования Word в ваше приложение.
Часть кода вроде:
Intent intent = new Intent(Intent.ACTION_EDIT);
Uri uri = Uri.parse("file:///"+file.getAbsolutePath());
intent.setDataAndType(uri, "plain/text");
startActivity(intent);
Просто означает, что файл Word будет отредактирован каким-либо другим приложением - а не вашим. Насколько я понимаю, это не совсем то, что вы хотите.
Ответ 2
так, как я пишу выше. Самый простой способ проверить, является ли это текстовым файлом (.doc), чтобы получить его абсолютный путь и проверить его с помощью path.endsWith(".doc");
Android не имеет приложения по умолчанию для просмотра .doc файлов, но если пользователь установил такое приложение (то есть Polaris Office), вы можете просмотреть его следующим образом:
//Uri uri = Uri.parse("file://"+file.getAbsolutePath());
Intent intent = new Intent();
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setAction(Intent.ACTION_VIEW);
String type = "application/msword";
intent.setDataAndType(Uri.fromFile(file), type);
startActivity(intent);
Ответ 3
Я не уверен, но я понимаю, что вы хотите, чтобы убедиться, что файл является текстовым документом, просто не глядя на расширение.
Я думаю, что текстовые документы имеют подпись файла (см. ссылку )
Подпись файла в этом случае представляет собой формат OLE Compound File, имеющий следующий двоичный код в позиции заголовка
d0 cf 11 e0 a1 b1 1a e1
Поэтому проверка соответствующих байтов должна сказать, является ли это текстовым документом или нет. Будьте осторожны, я не уверен, что двоичный файл определен для слова, документа или документа или доступен для всех офисов Microsoft: powerpoint, excel, word.
Вам следует искать в Интернете "подпись файла документа Microsoft Word". Это, безусловно, даст вам информацию, которую вы ищете.
Теперь, как "отредактировать", это еще один вопрос.
Ответ 4
Чтение и запись в документ Word
Портирование Apache POI для Android, скорее всего, единственное реалистичное решение для проекта с ограничениями на человеко-час. Это делали другие, и в Интернете есть информация о том, как это сделать. В следующем блоге приведен пример Excel, который вы можете принять за отправную точку для решения Word:
Android читать файл excel с использованием Apache POI
Validation
В то время как Apache POI, скорее всего, ваш лучший вариант, некоторые из открываемых документов не смогут открываться в MS Word и, следовательно, являются недействительными документами MS Word.
Структура формата Word довольно сложна. Это не просто поток текста с тегами. Это проприетарный формат, и невозможно достоверно проверить файл Word с полной точностью без доступа к структуре формата.
В конце концов, единственная 100% точная проверка документа Word, если она открывается в MS Word. Эта дискуссия с Джей Фридманом, Microsoft Word MVP, дает некоторую точку зрения на вопрос проверки и некоторое понимание структуры формата Word.
Net, если вы используете POI Apache, у вас будут ложные срабатывания, и это зависит от ваших требований клиента, является ли это приемлемым или нет.
Ответ 5
Ваш вопрос нуждается в еще одном разъяснении
В любом случае, это то, что вы должны сделать, чтобы отредактировать файл
-
Прочитайте файл
File sdcard = Environment.getExternalStorageDirectory();
File file = new File(sdcard,"theFILE");
StringBuilder content = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
content.append(line);
content.append('\n');
}
}
catch (IOException e) {
}
-
Изменить содержимое
content.append("bla bla");
content.append("kaza maza");
-
Сохранить файл
FileOutputStream f = new FileOutputStream(file);
f.write(content.toString().toCharArray());
Не забудьте добавить в свой манифест разрешения для записи на SD-карту:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Validation
К сожалению, это самая сложная часть. Apache POI - это выбор; однако это большая библиотека, которая не гарантирует правильное поведение.
Идеальное решение - проверить формат MS-DOC. Это действительно большое требование. Для такого ограниченного приложения, я думаю, вы не найдете ничего, если будете искать в Интернете. Таким образом, вам придется реализовать читателя, который соблюдает этот формат.
Ответ 6
Если вы хотите напрямую редактировать данные, просто сделайте намерение доступного текстового редактора.
Intent intent = new Intent(Intent.ACTION_EDIT);
Uri uri = Uri.parse("file:///"+file.getAbsolutePath());
intent.setDataAndType(uri, "plain/text");
startActivity(intent);