Wie schreibe ich Dateien in Assets-Ordner oder Raw-Ordner in Android?

73

Ich arbeite an einer Anwendung, in der ich einige Dateien, die in der Laufzeit von Assets / Raw-Ordnern vorhanden sind, von einem http-Speicherort aus aktualisieren muss.

Kann mir jemand helfen, indem er teilt, wie Dateien in Assets oder Raw-Ordnern geschrieben werden?

Dwarkesh
quelle
4
Assets / Raw-Ordner sind auf dem Telefon nicht vorhanden. Sie sind in das Paket kompiliert
Falmarri

Antworten:

143

Es kann nicht gemacht werden. Es ist unmöglich.

Aaron Saunders
quelle
5
Eigentlich habe ich es mit einem Ansichtsfehler gemacht (eine Webansicht zeigte meinen Java-Quellcode und dann enthielt die aus Assets geladene HTML-Datei meinen Java-Quellcode ohne Leerzeichen oder irgendetwas). Ich suche gerade nach Möglichkeiten, es neu zu erstellen.
CQM
16

Warum nicht stattdessen die Dateien im lokalen Dateisystem aktualisieren? Sie können Dateien in den Sandbox-Bereich Ihrer Anwendung lesen / schreiben.

http://developer.android.com/guide/topics/data/data-storage.html#filesInternal

Andere Alternativen, die Sie möglicherweise prüfen möchten, sind gemeinsame Perferences und die Verwendung von Cache-Dateien (alle unter dem obigen Link beschrieben).

Jing
quelle
13

Sie können keine Daten in den Asset- / Raw- Ordner schreiben , da diese gepackt ( .apk ) und nicht erweiterbar sind.

Wenn Ihre Anwendung Abhängigkeitsdateien vom Server herunterladen muss, können Sie APK-Erweiterungsdateien von Android ( http://developer.android.com/guide/market/expansion-files.html ) verwenden.

Suryavel TR
quelle
1

Ein anderer Ansatz für dasselbe Problem kann Ihnen beim Lesen und Schreiben von Dateien im privaten Anwendungskontext helfen

                 String NOTE = "note.txt";  
                 private void writeToFile() {
        try {
         OutputStreamWriter out = new OutputStreamWriter(openFileOutput(
                NOTES, 0));

         out.write("testing");
         out.close();
         }

        catch (Throwable t) {
        Toast.makeText(this, "Exception: " + t.toString(), 2000).show();
        }
             }


           private void ReadFromFile()
      {
        try {
        InputStream in = openFileInput(NOTES);
        if (in != null) {
            InputStreamReader tmp = new InputStreamReader(in);
            BufferedReader reader = new BufferedReader(tmp);
            String str;
            StringBuffer buf = new StringBuffer();
            while ((str = reader.readLine()) != null) {
                buf.append(str + "\n");
            }
            in.close();
            String temp = "Not Working";
            temp = buf.toString();
            Toast.makeText(this, temp, Toast.LENGTH_SHORT).show();
        }
    } catch (java.io.FileNotFoundException e) {
        // that's OK, we probably haven't created it yet
    } catch (Throwable t) {
        Toast.makeText(this, "Exception: " + t.toString(), 2000).show();
    }
}
Vikrant
quelle
0

Sie können keine JSON-Datei schreiben, während Sie sich in Assets befinden. Wie bereits beschrieben, sind Assets schreibgeschützt. Sie können jedoch Assets (JSON-Datei / alles andere in Assets) in den lokalen Speicher des Mobiltelefons kopieren und dann aus dem lokalen Speicher bearbeiten (schreiben / lesen). Weitere Speicheroptionen wie Shared Preference (für kleine Daten) und SQLite-Datenbank (für große Datenmengen) sind verfügbar.

Ahsan Idrees
quelle