Zeilenumbrüche verschwinden

  • Antworten:8
  • Bentwortet
Robbiani Renato
  • Forum-Beiträge: 650

15.06.2024, 17:10:16 via Website

Hallo zusammen

In meiner App hat es einen String, in dem ich den Text mit Umbrüchen '\n' in verschidene Zeilen zerlege.

image

Solange ich den String nicht speichere, wird alles korrekt dargestellt. (Untere Hälfte vom Bild). Sobald ich den String aber speichere und wieder lade, gehen die Zeilenumbrüche verloren. (Obere Hälfte vom Bild).

Was kann ich tun, damit die Zeilenumbrüche nicht verloren gehen?

Den Code zum Speichern und Laden des String:

private fun writeToFile(data: String, datname : String) {
    try { //MODE_PRIVATE Daten können nur von der App gelesen werden
        val fileOutputStream: FileOutputStream = openFileOutput(datname, MODE_PRIVATE)
        fileOutputStream.write(data.toByteArray())
        fileOutputStream.close()
    } catch (e: Exception) {
        e.printStackTrace()
    }
}

private fun readFromFile(datname : String): String {
    var fileInputStream: FileInputStream? = null
    var inputStreamReader: InputStreamReader? = null
    var bufferedReader: BufferedReader? = null
    val stringBuilder = StringBuilder()

    try {
        fileInputStream = openFileInput(datname)
        inputStreamReader = InputStreamReader(fileInputStream)
        bufferedReader = BufferedReader(inputStreamReader)

        var text: String? = bufferedReader.readLine()
        while (text != null) {
            stringBuilder.append(text)
            text = bufferedReader.readLine()
        }
    } catch (e: Exception) {
        e.printStackTrace()
    } finally {
        try {
            bufferedReader?.close()
            inputStreamReader?.close()
            fileInputStream?.close()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }

    return stringBuilder.toString()
}

Ich stelle nicht den ganzen Code hin, denn sonst wird meine Frage zimlich unübersichtlich. Aber wenn jemand mehr Code benötigt, dann liefere ich ihn gerne nach.

Gruss Renato

Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.547

16.06.2024, 14:13:01 via Website

Du hast ihn als ByteArray gespeichert du scheinst ihn auch so wieder haben zu wollen. Also was liegt da nahe?

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.547

16.06.2024, 13:51:49 via Website

Beim Zeilen weise lesen aus der Datei , musst du ach den Umbruch wider an den StringBuilder einfügen.

Du addest ja nur den Text in den builder keinen Umbruch.

while (text != null) {
stringBuilder.append(text)
text = bufferedReader.readLine()
}
ist nur text kein Umbruch zu sehen

Hilfreich?
Kommentieren
Beste Antwort
Jokel
  • Forum-Beiträge: 1.547

16.06.2024, 14:13:01 via Website

Du hast ihn als ByteArray gespeichert du scheinst ihn auch so wieder haben zu wollen. Also was liegt da nahe?

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 650

17.06.2024, 08:07:26 via Website

Ciao Jokel

Ich komme nicht weiter. Wenn ich es wie folgt mache

try {
        fileInputStream = openFileInput(datname)
        inputStreamReader = InputStreamReader(fileInputStream)
        bufferedReader = BufferedReader(inputStreamReader)

        var text: String? = bufferedReader.readLine()
        text += "\n"
        while (text != null) {
            stringBuilder.append(text)
            text = bufferedReader.readLine()
            text += "\n"
        }

Bleibt die App hängen.
Was kann ich sonst noch machen?

Gruss Renato

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 650

17.06.2024, 08:50:46 via Website

So geht es nun:

try {
        fileInputStream = openFileInput(datname)
        inputStreamReader = InputStreamReader(fileInputStream)
        bufferedReader = BufferedReader(inputStreamReader)

        var text: String? = bufferedReader.readLine()
        while (text != null) {
            text += '\n'
            stringBuilder.append(text)
            text = bufferedReader.readLine()
        }

Danke für die Hilfe Jokel.

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.547

17.06.2024, 09:32:25 via Website

Ja das geht.
Einfacher wäre es doch gewesen das ByteArray zurück zulesen und dann in eimen String zu wanden. Also Umgekert zum Speichern.

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 650

17.06.2024, 21:30:54 via Website

Ciao Jokel

Das verstehe ich nicht, wie das gehen soll. Kannst du mir auf die Sprünge helfen.

Gruss Renato

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.547

18.06.2024, 15:56:14 via Website

Eine nicht zu grosse Datei in Java etwa so

File f = new File(datname );
FileInputStream in = new FileInputStream(f);
int len = (int)f.length();
byte buf[] = new byte[len];
in.read( buf, 0, len);
in.close();

Nach Kotlin wirst du es auch selber schaffen.

Hilfreich?
Kommentieren
Robbiani Renato
  • Forum-Beiträge: 650

19.06.2024, 08:51:18 via Website

Danke Jokel, ich werde es mal versuchen.

Gruss Renato

Hilfreich?
Kommentieren