2012-06-08 2 views
0

Я использовал следующий метод для записи данных в файл в одном из приложений AndroidКак читать данные, записанные в файл из одного приложения Android с помощью другого приложения Android

private void writeFileToInternalStorage() { 

    String eol = System.getProperty("line.separator"); 
    BufferedWriter writer = null; 

try{ 
    writer = new BufferedWriter(new OutputStreamWriter(openFileOutput("myFile.txt", MODE_WORLD_WRITEABLE|MODE_WORLD_READABLE))); 
     writer.write("Hello world!"); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     if (writer != null) 
     { 
     try 
     { 
      writer.close(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     } 
    } 
} 

Затем я попытался прочитать этот файл с другим андроида применение с использованием этого метода

private void readFileFromInternalStorage(){ 
    String eol = System.getProperty("line.separator"); 
    BufferedReader input = null; 
    try 
    { 
     input = new BufferedReader(new InputStreamReader(openFileInput("myFile1.txt"))); 
     String line; 
     StringBuffer buffer = new StringBuffer(); 
     while ((line = input.readLine()) != null) 
     { 
      buffer.append(line + eol); 


     } 

     TextView tv = (TextView) findViewById(R.id.textView); 
     tv.setText(buffer.toString().trim()); 

    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
    finally 
    { 
     if (input != null) 
     { 
      try 
      { 
       input.close(); 
      } 
      catch (IOException e) 
      { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

Второй способ не может прочитать файл. Я добавил также права на чтение записи, но он показывает только пустой экран. Какая может быть ошибка и как я могу ее исправить? Я новичок в программировании на Android и нуждаюсь в вашей помощи.

Спасибо!

+0

Эти два метода работают исправно, если оба метода находятся в одном приложении. – Grant

ответ

1

Проблема заключается в том

openFileOutput("myFile.txt", MODE_WORLD_WRITEABLE|MODE_WORLD_READABLE)) 

В документации сказано:

Этот файл записывается путь относительно к вашему приложению в пределах

Так дело вы пишете файл в пути по отношению к приложению 1 и пытаетесь прочитать его из пути относительно применения 2.

Вы должны быть в состоянии назвать Environment.getExternalStorageDirectory(), чтобы получить корневой путь на SD-карту и использовать ее для создания FileOutputStream. Оттуда просто используйте стандартные java.io-процедуры.

Ознакомиться ниже фрагмента, чтобы записать файл на SD-карту.

private void writeToSDCard() { 


try 
     { 
      File file = new File(Environment.getExternalStorageDirectory(), 
        "filename"); 
      BufferedWriter writer = new BufferedWriter(new FileWriter(file)); 
      writer.write("Hello World"); 
      writer.close(); 
     } catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
} 

Посмотрите ниже фрагмент кода, чтобы прочитать файл, сохраненный на SD-карте.

private void readFileFromSDCard() { 
    File directory = Environment.getExternalStorageDirectory(); 
    // Assumes that a file article.rss is available on the SD card 
    File file = new File(directory + "/article.rss"); 
    if (!file.exists()) { 
     throw new RuntimeException("File not found"); 
    } 
    Log.e("Testing", "Starting to read"); 
    BufferedReader reader = null; 
    try { 
     reader = new BufferedReader(new FileReader(file)); 
     StringBuilder builder = new StringBuilder(); 
     String line; 
     while ((line = reader.readLine()) != null) { 
      builder.append(line); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if (reader != null) { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 
+0

Где добавить, что ?? У меня нет таких знаний в программировании на Android. Я просто новичок :) – Grant

+0

вызов функции записи onClick кнопки в приложении 1 и вызов функции чтения onClick кнопки в приложении 2. –

+0

включают в манифесте приложения 1 –

0

Лучше всего поместить его в scdcard в нечто вроде /sdcard/Android/data/package/shared/

Смежные вопросы