wake-up-neo.com

So lesen / schreiben Sie einen String aus einer Datei in Android

Ich möchte eine Datei im internen Speicher speichern, indem ich den von EditText eingegebenen Text erhalte. Dann möchte ich, dass dieselbe Datei den eingegebenen Text in String-Form zurückgibt und ihn in einem anderen String speichert, der später verwendet wird.

Hier ist der Code:

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);
            }
        });
    }

Ich habe Kommentare hinzugefügt, um Ihnen zu helfen, meine Punkte dahingehend zu analysieren, wo die Operationen/Variablen ausgeführt werden sollen.

174
Major Aly

Hoffe, das könnte nützlich für Sie sein.

Datei schreiben:

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());
    } 
}

Datei lesen:

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;
}
296
R9J

Für diejenigen, die eine allgemeine Strategie zum Lesen und Schreiben eines Strings in eine Datei suchen:

Zuerst ein Dateiobjekt holen

Sie benötigen den Speicherpfad. Verwenden Sie für den internen Speicher:

File path = context.getFilesDir();

Verwenden Sie für den externen Speicher (SD-Karte):

File path = context.getExternalFilesDir(null);

Dann erstellen Sie Ihr Dateiobjekt:

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

Schreiben Sie einen String in die Datei

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

Oder mit Google Guava

String contents = Files.toString (Datei, StandardCharsets.UTF_8);

Lesen Sie die Datei in eine Zeichenfolge

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);   

Oder wenn Sie Google Guava verwenden

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

Der Vollständigkeit halber erwähne ich

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

das erfordert keine Bibliotheken, aber Benchmarks 50% - 400% langsamer als die anderen Optionen (in verschiedenen Tests auf meinem Nexus 5).

Notizen

Für jede dieser Strategien werden Sie aufgefordert, eine IOException abzufangen.

Die Standard-Zeichenkodierung für Android ist UTF-8.

Wenn Sie externen Speicher verwenden, müssen Sie Ihrem Manifest Folgendes hinzufügen:

<uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE"/>

oder

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>

Schreibberechtigung impliziert Leseberechtigung, sodass Sie nicht beide benötigen.

162
SharkAlley
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();
}
31
Eugene

Nur ein paar Modifikationen beim Lesen eines Strings aus einer Dateimethode für mehr Leistung

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;
}
7
Tai Le Anh

überprüfen Sie den folgenden Code.

Lesen aus einer Datei im Dateisystem.

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;
        }
    }

der folgende Code dient zum Schreiben der Datei in das interne Dateisystem.

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;
        }
    }

Ich denke, das wird dir helfen.

5
Raj

Ich bin ein bisschen ein Anfänger und habe Mühe, das heute zum Laufen zu bringen.

Unten ist die Klasse, mit der ich gelandet bin. Es funktioniert, aber ich habe mich gefragt, wie unvollkommen meine Lösung ist. Wie auch immer, ich hatte gehofft, dass einige von euch erfahreneren Leuten bereit sind, sich meine IO Klasse anzuschauen und mir ein paar Tipps zu geben. Prost!

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();
        }
    }
}
3
Nihilarian