Soru & Cevap

Android alt alta yazma ...

19.08.2017 - 12:04

Arkadaşlar elimde kullandığım şöyle bir kod var. Bununla yazma işlemini sıkıntısız yapıyorum fakat alt alta yazamıyorum. Bunu nasıl çözebilirim. Girdiğim her veri alt alta yazılsın istiyorum.

package com.example.dc.myapplication;

import android.content.Context;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

import static android.R.attr.data;

/**
 * Created by DC on 17.08.2017.
 */

public class WriteInternal {
    public void WriteInternal(String fileName, String[] data, Context context){

        try {

            File myInternalFile = new File(context.getFilesDir(), fileName);

            if (myInternalFile.exists()) {
                //dosya varsa
            } else {

                myInternalFile.createNewFile();
            }

            FileOutputStream myOutputStream = new FileOutputStream(myInternalFile, true);
            OutputStreamWriter myOutputStreamWriter = new OutputStreamWriter(myOutputStream);

            for (int i = 0; i < data.length; i++) {
                myOutputStreamWriter.write("\n"+data[i]);

            }

            myOutputStreamWriter.flush();
            myOutputStreamWriter.close();

            myOutputStream.close();

        }catch (Exception e)
        {

        }

    }


}

 

1,020 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-61684-1501749567.jpg
oğuzhanyiğit
19.08.2017 - 06:44

Bir önceki sorduğun aynı soruya verdiğim cevaptakileri denedin ve ne sorun çıktı ki? o metotları 2-3 uygulamamda sorunsuzca kullanıyorum ben, işin özü sen bir string yazdırmaya çalışıyosun, bu string'de bir alt satıra geçmek için string'in sonuna "\n" eklenir, data diye string dizin var ilk önce bu dizini tek bir string'e çevirmen gerek (bu optimizasyon sağlar ayrı ayrı 10 kere dosyayı açıp yazmak yerne tek seferde yazdırırsın) bu işi de for'la halledebilirsin, benim bir önceki cevabımda gösterdiğim gibi, daha sonrada elde ettiğin bu tek String output'unu dosyaya yazdırırsın, dosyaya yazdırmanın birkaç farklı yolu var bir taneside yukarda ki senin kodun gibi veya benim cevabımda ki gösterdiğim kod gibi, yukardaki senin kodunun birkaç sıkıntısı var(farkedilmese bile) sıkıntılar şu ki: herhangi bir exception'da akış direk catch'e düşer ki bu açtığın stream'leri kapatamaman anlamına gelir bu da tehlikeli "memory leak"lere sebebiyet verir, illa yukardaki kodu kullanıcaksan bu bahsettiğim sıkıntıyı önlemek adına stream'leri kapatma işlemini(close()) finally bloğunun içinde yap

Oğuzhan Yiğit
20.08.2017 - 02:14
Yazmaya çalıştığın lokasyon read-only olabilir o yüzden işlemi yapmadan önce dosyaya setWritable(true) ile write-access verebilirsin + gerekli izinleri aldığını düşünüyorum (6.0 sonrası runtime permission, öncesi normal manifestten izin)
Çağrı Uğurel
20.08.2017 - 12:00
Dediğin kodu denedim veriyi dosyaya yazmadı hocam. :/