Как читать / писать строки из файла на Android

Я искал и рассмотрел большинство вопросов здесь, ни одна из которых, казалось, не решила мою ситуацию.

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

Вот код:

package com.omm.easybalancerecharge; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.telephony.TelephonyManager; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText num = (EditText) findViewById(R.id.sNum); Button ch = (Button) findViewById(R.id.rButton); TelephonyManager operator = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String opname = operator.getNetworkOperatorName(); TextView status = (TextView) findViewById(R.id.setStatus); final EditText ID = (EditText) findViewById(R.id.IQID); Button save = (Button) findViewById(R.id.sButton); final String myID = ""; //When Reading The File Back, I Need To Store It In This String For Later Use save.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Get Text From EditText "ID" And Save It To Internal Memory } }); if (opname.contentEquals("zain SA")) { status.setText("Your Network Is: " + opname); } else { status.setText("No Network"); } ch.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub //Read From The Saved File Here And Append It To String "myID" String hash = Uri.encode("#"); Intent intent = new Intent(Intent.ACTION_CALL); intent.setData(Uri.parse("tel:*141*" + /*Use The String With Data Retrieved Here*/ num.getText() + hash)); startActivity(intent); } }); } 

Я включил комментарии, чтобы помочь вам проанализировать мои моменты относительно того, где я хочу, чтобы операции выполнялись / переменные, которые будут использоваться.

Надеюсь, это может быть полезно для вас.

Запись файла:

 private void writeToFile(String data,Context context) { try { OutputStreamWriter outputStreamWriter = new OutputStreamWriter(context.openFileOutput("config.txt", Context.MODE_PRIVATE)); outputStreamWriter.write(data); outputStreamWriter.close(); } catch (IOException e) { Log.e("Exception", "File write failed: " + e.toString()); } } 

Читать файл:

 private String readFromFile(Context context) { String ret = ""; try { InputStream inputStream = context.openFileInput("config.txt"); if ( inputStream != null ) { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); String receiveString = ""; StringBuilder stringBuilder = new StringBuilder(); while ( (receiveString = bufferedReader.readLine()) != null ) { stringBuilder.append(receiveString); } inputStream.close(); ret = stringBuilder.toString(); } } catch (FileNotFoundException e) { Log.e("login activity", "File not found: " + e.toString()); } catch (IOException e) { Log.e("login activity", "Can not read file: " + e.toString()); } return ret; } 

Для тех, кто ищет общую страtagsю для чтения и записи строки в файл:

Во-первых, получить файл-объект

Вам понадобится путь хранения. Для внутреннего хранилища используйте:

 File path = context.getFilesDir(); 

Для внешнего накопителя (SD-карта) используйте:

 File path = context.getExternalFilesDir(null); 

Затем создайте свой файловый объект:

 File file = new File(path, "my-file-name.txt"); 

Запись строки в файл

 FileOutputStream stream = new FileOutputStream(file); try { stream.write("text-to-write".getBytes()); } finally { stream.close(); } 

Или с Google Guava

Содержимое строки = Files.toString (файл, StandardCharsets.UTF_8);

Прочитайте файл в строке

 int length = (int) file.length(); byte[] bytes = new byte[length]; FileInputStream in = new FileInputStream(file); try { in.read(bytes); } finally { in.close(); } String contents = new String(bytes); 

Или, если вы используете Google Guava

 String contents = Files.toString(file,"UTF-8"); 

Для полноты я упомянул

 String contents = new Scanner(file).useDelimiter("\\A").next(); 

который не требует библиотек, но контрольные показатели на 50-400% медленнее, чем другие варианты (в различных тестах на моем Nexus 5).

Заметки

Для каждой из этих страtagsй вам будет предложено поймать исключение IOException.

Кодировка символов по умолчанию на Android – UTF-8.

Если вы используете внешнее хранилище, вам нужно добавить в свой манифест либо:

  

или

  

Разрешение записи подразумевает разрешение на чтение, поэтому вам не нужны оба.

 public static void writeStringAsFile(final String fileContents, String fileName) { Context context = App.instance.getApplicationContext(); try { FileWriter out = new FileWriter(new File(context.getFilesDir(), fileName)); out.write(fileContents); out.close(); } catch (IOException e) { Logger.logError(TAG, e); } } public static String readFileAsString(String fileName) { Context context = App.instance.getApplicationContext(); StringBuilder stringBuilder = new StringBuilder(); String line; BufferedReader in = null; try { in = new BufferedReader(new FileReader(new File(context.getFilesDir(), fileName))); while ((line = in.readLine()) != null) stringBuilder.append(line); } catch (FileNotFoundException e) { Logger.logError(TAG, e); } catch (IOException e) { Logger.logError(TAG, e); } return stringBuilder.toString(); } 

Просто небольшая модификация строки чтения из файлового метода для большей производительности

 private String readFromFile(Context context, String fileName) { if (context == null) { return null; } String ret = ""; try { InputStream inputStream = context.openFileInput(fileName); if ( inputStream != null ) { InputStreamReader inputStreamReader = new InputStreamReader(inputStream); int size = inputStream.available(); char[] buffer = new char[size]; inputStreamReader.read(buffer); inputStream.close(); ret = new String(buffer); } }catch (Exception e) { e.printStackTrace(); } return ret; } 

проверьте приведенный ниже код.

Чтение из файла в файловой системе.

 FileInputStream fis = null; try { fis = context.openFileInput(fileName); InputStreamReader isr = new InputStreamReader(fis); // READ STRING OF UNKNOWN LENGTH StringBuilder sb = new StringBuilder(); char[] inputBuffer = new char[2048]; int l; // FILL BUFFER WITH DATA while ((l = isr.read(inputBuffer)) != -1) { sb.append(inputBuffer, 0, l); } // CONVERT BYTES TO STRING String readString = sb.toString(); fis.close(); catch (Exception e) { } finally { if (fis != null) { fis = null; } } 

ниже код – записать файл во внутреннюю файловую систему.

 FileOutputStream fos = null; try { fos = context.openFileOutput(fileName, Context.MODE_PRIVATE); fos.write(stringdatatobestoredinfile.getBytes()); fos.flush(); fos.close(); } catch (Exception e) { } finally { if (fos != null) { fos = null; } } 

Я думаю, это поможет вам.

Я немного новичок и изо всех сил пытался заставить это работать сегодня.

Ниже приведен class, в который я попал. Это работает, но мне было интересно, насколько несовершенно мое решение. Во всяком случае, я надеялся, что некоторые из вас более опытные люди, возможно, захотят посмотреть мой class IO и дать мне несколько советов. Ура!

 public class HighScore { File data = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator); File file = new File(data, "highscore.txt"); private int highScore = 0; public int readHighScore() { try { BufferedReader br = new BufferedReader(new FileReader(file)); try { highScore = Integer.parseInt(br.readLine()); br.close(); } catch (NumberFormatException | IOException e) { e.printStackTrace(); } } catch (FileNotFoundException e) { try { file.createNewFile(); } catch (IOException ioe) { ioe.printStackTrace(); } e.printStackTrace(); } return highScore; } public void writeHighScore(int highestScore) { try { BufferedWriter bw = new BufferedWriter(new FileWriter(file)); bw.write(String.valueOf(highestScore)); bw.close(); } catch (IOException e) { e.printStackTrace(); } } } 

Чтобы добавить существующий файл.

  File file = new File(persistPath); BufferedWriter out = new BufferedWriter(new FileWriter(file, true), 1024); out.write(str); out.newLine(); out.close(); 
  • getString вне контекста или действия
  • размещение файла в пути к classам
  • Android: как использовать AlarmManager
  • Передача массивов с помощью Intent.putExtra
  • Как скомпилировать пакеты в java?
  • Настраиваемые виджеты в Android
  • Полноэкранный просмотр без растягивания видео
  • Не удалось открыть Android 6.0: EACCES (Permission denied)
  • Ошибка «ClassNotFoundException» в IntelliJ IDEA
  • Преобразование строки в массив JSON
  • Вызов метода подclassа в Java
  • Interesting Posts

    Как эффективно распределять большие файлы

    Как автоматически включить все двухсторонние взаимодействия в модели glm в R

    Как обращаться с парами пар имя / значение аргументов функции в MATLAB

    Зачем использовать бинарный поиск, если есть тройной поиск?

    clear Недавние приложения уничтожают память приложений, и мой ресивер перестает работать

    База данных.BeginTransaction vs Transactions.TransactionScope

    Заполнение табуляции с помощью каталогов / ссылок

    Понимание оператора списка (%) в Boost.Spirit

    Форматировать столбец (или ячейку) Excel как текст в C #?

    classическое наследование против прототипального наследования в javascript

    Открытие приложения Shiny прямо в браузере по умолчанию

    Как использовать переменную Bash (string), содержащую кавычки в команде?

    Как я могу получить размер блока памяти, выделенного с помощью malloc ()?

    Есть ли функция автоматического отступа HTML или плагин для Sublime Text (aka prettify / beautify / format)?

    Как отменить обновления в Windows 10?

    Давайте будем гением компьютера.