читать данные с SDCard в Android - PullRequest
3 голосов
/ 08 января 2011

Я просто хочу отобразить содержимое файлов с SDCard на эмуляторе (в виде файлов изображений / видеофайлов / музыкальных файлов и т. П.)мой вывод я получил путь к файлу и имя файла.Но когда я нажимаю на файл, он не показывает содержимое.Что я должен сделать для этого?Спасибо

Наконец-то я понял. Мой исправленный код показан ниже ..

public class SDCardActivity extends ListActivity {
 private List<String> item = null;
 private List<String> path = null;
 private String root="/sdcard";
 private TextView myPath;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       // Intent intent=getIntent();

        setContentView(R.layout.sub);
        myPath = (TextView)findViewById(R.id.path);
        getDir(root);
    }

    private void getDir(String dirPath)
    {
     myPath.setText("Location: " + dirPath);

     item = new ArrayList<String>();
     path = new ArrayList<String>();

     File f = new File(dirPath);
     File[] files = f.listFiles();

     if(!dirPath.equals(root))
     {

      item.add(root);
      path.add(root);

      item.add("../");
      path.add(f.getParent());

     }

     for(int i=0; i < files.length; i++)
     {
       File file = files[i];
       path.add(file.getPath());
       if(file.isDirectory())
        item.add(file.getName() + "/");
       else
        item.add(file.getName());
     }

     ArrayAdapter<String> fileList =
      new ArrayAdapter<String>(this, R.layout.row, item);
     setListAdapter(fileList);
    }

 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) {

  File file = new File(path.get(position));

  if (file.isDirectory())
  {
   if(file.canRead())
    getDir(path.get(position));
   else
   {
    new AlertDialog.Builder(this)
    .setIcon(R.drawable.icon)
    .setTitle("[" + file.getName() + "] folder can't be read!")
    .setPositiveButton("OK", 
      new DialogInterface.OnClickListener() {

       public void onClick(DialogInterface dialog, int which){
        // TODO Auto-generated method stub
           dialog.dismiss();
       }
      }).show();
   }
  }
  else
  {
      Intent intent = new Intent();
      intent.setAction(Intent.ACTION_VIEW);
      Uri uri = Uri.parse("file://" + file.getPath());
      String fname=file.getName();
      if(fname.endsWith(".jpeg")||fname.endsWith("png")||fname.endsWith(".gif"))
      {
          intent.setDataAndType(uri, "image/*");
          startActivity(intent);
      }
      else if(fname.endsWith(".mp4")||fname.endsWith(".3gp"))
      {
          intent.setDataAndType(uri, "video/*");
          startActivity(intent);
      }
      else if(fname.endsWith(".mp3"))
      {
          intent.setDataAndType(uri, "audio/*");
          startActivity(intent);
      }
      else  
          try {
              EditText tv = (EditText)findViewById(R.id.tn);
              StringBuilder text = new StringBuilder();

                BufferedReader br = new BufferedReader(new FileReader(file));
                String line;

                while ((line = br.readLine()) != null) {
                    text.append(line);
                    text.append('\n');

                    //Set the text
                    tv.setText(text);

                }
            }//try
            catch (IOException e) {
                //You'll need to add proper error handling here
            }//catch

  }
 }
}

Ответы [ 2 ]

8 голосов
/ 17 июня 2011

Ниже приведен код, показывающий, как читать содержимое файла с SDcard. Просто вставьте один текстовый файл в Sdcard и внедрите приведенный ниже код в вашу программу.

    try{
           File f = new File(Environment.getExternalStorageDirectory()+"/f1.txt");
           fileIS = new FileInputStream(f);
           BufferedReader buf = new BufferedReader(new InputStreamReader(fileIS));
           String readString = new String(); 
           //just reading each line and pass it on the debugger
           while((readString = buf.readLine())!= null){
              textdata.setText(readString);
              Log.d("line: ", readString);
           }
        } catch (FileNotFoundException e) {
           e.printStackTrace();
        } catch (IOException e){
           e.printStackTrace();
        }
4 голосов
/ 08 января 2011

Может быть, я пропустил его в вашем коде, но не смог найти в нем Намерение Вы должны вызвать Intent с флагом ACTION_VIEW для любого файла, который вы хотите показать.

Например.

Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
Uri imgUri = Uri.parse("file://" + file.getPath());
intent.setDataAndType(imgUri, "image/*");
startActivity(intent);

Вы просто создаете экземпляр Intent, устанавливаете действие ACTION_VIEW в нашем случае. Затем вы создаете объект Uri, объединяя путь вашего файлового объекта к file://. Все, что вам нужно сделать сейчас, это установить данные и тип для намерения, указав uri и строку типа. В моем примере каждый тип изображения. Однако вы можете просто указать определенный тип изображения. Как только ваше намерение настроено и готово, вы запускаете его, запустив Activity с намерением в качестве параметра.

Android позаботится о поиске подходящего приложения для отображения данных в намерениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...