Chcę zapisać plik w pamięci wewnętrznej, pobierając tekst z EditText. Następnie chcę, aby ten sam plik zwrócił wprowadzony tekst w postaci ciągu i zapisał go w innym ciągu, który będzie później używany.
Oto kod:
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);
}
});
}
Zamieściłem komentarze, aby pomóc ci w dalszej analizie moich uwag na temat tego, gdzie chcę, aby operacje zostały wykonane / zmienne, które mają być użyte.
Odpowiedzi:
Mam nadzieję, że może ci się to przydać.
Napisz plik:
Czytaj plik:
źródło
final
bloku, jak w odpowiedzi @SharkAlleyDla tych, którzy szukają ogólnej strategii odczytu i zapisu ciągu do pliku:
Najpierw pobierz obiekt pliku
Będziesz potrzebował ścieżki przechowywania. W przypadku pamięci wewnętrznej użyj:
W przypadku pamięci zewnętrznej (karty SD) użyj:
Następnie utwórz obiekt pliku:
Napisz ciąg do pliku
Lub z Google Guava
Przeczytaj plik do łańcucha
Lub jeśli korzystasz z Google Guava
Dla kompletności wspomnę
który nie wymaga bibliotek, ale testy porównawcze są o 50% - 400% wolniejsze niż inne opcje (w różnych testach na moim Nexusie 5).
Notatki
Dla każdej z tych strategii zostaniesz poproszony o złapanie wyjątku IOException.
Domyślne kodowanie znaków w Androidzie to UTF-8.
Jeśli używasz pamięci zewnętrznej, musisz dodać do manifestu:
lub
Uprawnienie do zapisu oznacza uprawnienie do odczytu, więc nie potrzebujesz obu.
źródło
new File(path + "/my-file-name.txt");
. To przeczy znacznemu sensowiFile
. Użyjnew File(path, "my-file-name.txt");
zamiast tego.File
jest tam z jakiegoś powodu. W twoim przypadku równie dobrze możesz pominąćFile
i po prostu zrobićnew FileInputStream(path + "/my-file-name.txt");
, czego nie polecam. (Co jeśli na przykładpath
zawiera znak/
źródło
context.getFilesDir()
. Można po prostu zastąpić wystąpienianew File(context.getFilesDir(), fileName)
zFile
obiektu lubString
przekazywane do funkcji zamiastfileName
.Tylko niewielkie modyfikacje odczytu ciągu z metody pliku dla większej wydajności
źródło
sprawdź poniższy kod.
Odczytywanie z pliku w systemie plików.
poniższy kod służy do zapisania pliku w wewnętrznym systemie plików.
Myślę, że to ci pomoże.
źródło
Jestem trochę początkującym i miałam problem z tym, żeby dzisiaj to zadziałało.
Poniżej jest klasa, z którą skończyłem. Działa, ale zastanawiałem się, jak niedoskonałe jest moje rozwiązanie. W każdym razie miałem nadzieję, że niektórzy z was, bardziej doświadczeni ludzie, będą skłonni spojrzeć na moją klasę IO i udzielić wskazówek. Twoje zdrowie!
źródło
pierwszą rzeczą, której potrzebujemy, są uprawnienia w AndroidManifest.xml
więc w klasie asyncTask Kotlin traktujemy tworzenie pliku
Oczywiście, jeśli używasz Androida powyżej Api 23, musisz obsłużyć żądanie, aby umożliwić zapis do pamięci urządzenia. Coś takiego
następnie w działaniu wykonaj połączenie.
źródło
Kotlin
źródło