2015-08-04 5 views
1

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

У кого-нибудь есть пример того, как писать файлы в установочные папки приложения?

ответ

0

использовать следующий код для записи из Edittext в файл и чтение из файла в Edittext установить следующее разрешение на AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 

JAVA CODE

EditText LoadedText; 
    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      setContentView(R.layout.activity_main); 
      LoadedText=(EditText) findViewById(R.id.LoadedText); 
      File sdcard = Environment.getExternalStorageDirectory(); 

      //Get the text file 
      File file = new File("/sdcard/RouterSetup.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 
      } 
LoadedText.setText(text.toString()); 
     } 

    public void saveFile() { 
      try { 

       File myFile = new File("/sdcard/RouterSetup.txt"); 
        myFile.createNewFile(); 
       FileOutputStream fOut = new FileOutputStream(myFile); 
       OutputStreamWriter myOutWriter = 
             new OutputStreamWriter(fOut); 
       myOutWriter.append(LoadedText.getText()); 
       myOutWriter.close(); 
       fOut.close(); 
       Toast.makeText(getBaseContext(), 
         "Done writing SD " + LoadedText.getText() + ".txt", 
         Toast.LENGTH_SHORT).show(); 
      } catch (Exception e) { 
       Toast.makeText(getBaseContext(), e.getMessage(), 
         Toast.LENGTH_SHORT).show(); 
      } 
      } 

getFilesDir() vs Environment.getDataDirectory() общественного getFilesDir File()

Возвращает абсолютный путь к каталогу в файловой системе, где файлы, созданные с помощью openFileOutput(String, int) сохраняются.

общественности статической getExternalStorageDirectory File()

Возврат основной внешний каталог хранения. Этот каталог в настоящее время недоступен, если он был установлен пользователем на своем компьютере, был удален с устройства или возникла какая-то другая проблема. Вы можете определить его текущее состояние с помощью getExternalStorageState().

Если вы хотите, чтобы ваш путь к приложению использовать getFilesDir(), который даст вам тракт /data/data/your package/files

Вы можете получить путь с помощью окружающей среды вара ваших данных/пакета, используя

getExternalFilesDir(Environment.getDataDirectory().getAbsolutePath()).getAbsolutePath();, который будет возвращать путь из корневого каталога вашего внешнего хранилища как /storage/sdcard/Android/data/your pacakge/files/data

Для доступа к внешним ресурсам вам необходимо предоставить разрешение WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE в вашем манифесте.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 
+0

бы Environment.getExternalStorageDirectory() ; указать путь к установленному приложению? Знаете ли вы, какой путь получит getFilesDir()? – snj15

+0

, пожалуйста, проверьте ответ после обновления –

+0

'установочные папки приложения? Что вы подразумеваете под этим? Вы не можете писать там, если не укоренились. – greenapps

-1

С каким типом файлов вы говорите? Для хранения данных вы можете использовать shared preferences. Для типа СМИ вы можете использовать media storage.

+0

Это xml-файл. – snj15

-1
//here i am downloading file from server and writing 

    String download_link = "some server location"; 
       URL url = new URL(download_link); 
       HttpsURLConnection c = null; 
       if (url.getProtocol().toLowerCase().equals("https")) { 
        trustAllHosts(); 
        c = (HttpsURLConnection) url.openConnection(); 
        c.setHostnameVerifier(DO_NOT_VERIFY); 
       } 
       c.setRequestMethod("GET"); 
       c.setDoOutput(true); 
       c.connect(); 
       String PATH = Environment.getExternalStorageDirectory() + "/download/"; 
       File file = new File(PATH); 
       file.mkdirs(); 
       File outputFile = new File(file, "Mobi.apk"); 
       if(outputFile.exists()){ 
        outputFile.delete(); 
       } 
       FileOutputStream fos = new FileOutputStream(outputFile); 
       InputStream is = c.getInputStream(); 
       byte[] buffer = new byte[1024]; 
       int len1 = 0; 
       while ((len1 = is.read(buffer)) != -1) { 
        fos.write(buffer, 0, len1); 
       } 
       fos.close(); 
       is.close(); 

you need to add permission in manifest file:  

uses-permission android:name="android.permission.INTERNET"></uses-permission> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> 
+0

Почему вы устанавливаете решение для загрузки с сервера, ему нужно написать и прочитать файл из установочных папок приложения? –

0

Самое простое решение

String filename = "stuff.xml";

READ

FileInputStream stream = ctx.openFileInput(filename); 

(и ниже очень простой пример разбора файл)

BufferedReader buffReader = new BufferedReader(new InputStreamReader(inputStream)); 
String line; 
try { 
    while ((line = buffReader.readLine()) != null) { 
     ... 
     // do something cool 
     ... 
    } 
} catch (IOException e) { 
    Log.e("MyApp", "SCREAAAAAM", e); 
} 

WRITE

OutputStreamWriter outputStreamWriter = new OutputStreamWriter(ctx.openFileOutput(filename, Context.MODE_PRIVATE)); 
outputStreamWriter.write("this is text not xml :("); 

Так что две основных вещи, чтобы отметить является openFileInput и openFileOutput методы Context (т.е. вашей деятельности), которая заботиться о тяжелой

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