Проверка и чтение файла 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);