Android: Как показать текстовый файл, который был загружен?

Я использовал класс Download Manager, чтобы загрузить текстовый файл с сервера и сохранить его в общем внешнем хранилище. Затем я хочу показать текстовый файл, возможно, используя класс listView. Я искал в интернете и обнаружил, что есть много примеров, показывающих, как отобразить текстовый файл из ресурсов приложения. Однако как я могу показать файл, который хранится в определенном пути к файлу?

Большое спасибо.

3 ответа

  1. В вашем макете вам понадобится что-то для отображения текста. TextView является очевидным выбором. Так что у вас будет что-то вроде этого:

    <TextView 
    android_id="@+id/text_view" 
    android_layout_width="fill_parent" 
    android_layout_height="fill_parent"/>
    

    И ваш код будет выглядеть так:

    //Find the directory for the SD Card using the API
    //*Don't* hardcode "/sdcard"
    File sdcard = Environment.getExternalStorageDirectory();
    
    //Get the text file
    File file = new File(sdcard,"file.txt");
    
    //Read text from file
    StringBuilder text = new StringBuilder();
    
    try {
    BufferedReader br = new BufferedReader(new FileReader(file));
    String line;
    
    while ((line = br.readLine()) != null) {
        text.append(line);
        text.append('\n');
    }
    br.close();
    }
    catch (IOException e) {
    //You'll need to add proper error handling here
    }
    
    //Find the view by its id
    TextView tv = (TextView)findViewById(R.id.text_view);
    
    //Set the text
    tv.setText(text);
    

    Кроме того, поместите разрешение на чтение внешнего хранилища в файл манифеста:

    <uses-permission android_name="android.permission.READ_EXTERNAL_STORAGE" />
    

    ИЛИ
    Вы также можете использовать намерение по умолчанию для выполнения работы!

    File txtfile = new File("/sdcard/some_file.txt");
    Intent i = new Intent();
    i.setDataAndType(Uri.fromFile(txtfile), "text/plain");
    startActivity(i);
    

  2. Попробуйте ниже кода.

      private void openFile() {
    
         File file = new File("file_path");
         Uri path = Uri.fromFile(file);
         Intent intent = new Intent(Intent.ACTION_VIEW);
         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
         intent.setAction(Intent.ACTION_VIEW);
         intent.setData(path);
         intent.setType("text/plain");
         try {
             startActivity(intent);
         } catch (ActivityNotFoundException e) {
             Toast.makeText(getActivity(), "No application found",
                    Toast.LENGTH_SHORT).show();
         }
     }
    
  3. Вы можете открыть файл с sd-карты, используя приведенный ниже код во внешнем приложении, которое совместимо с расширением файла,

       public void openDocument(String fileName) {
    
        File file = new File(Environment.getExternalStorageDirectory(), DATA_DIRECTORY + "/" + fileName);
        Uri fileUri = Uri.fromFile(file);
        Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
        String extension = MimeTypeMap.getFileExtensionFromUrl(fileUri.toString());
        String mimetype =  MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
        if (extension.equalsIgnoreCase("") || mimetype == null) {
            // if there is no extension or there is no definite mimetype, still try to open the file
            intent.setDataAndType(fileUri, "application/*");
        } else {
            intent.setDataAndType(fileUri, mimetype);
        }
        // custom message for the intent
        startActivity(Intent.createChooser(intent, "Choose an Application:"));
    
    
    }