Yapmaya çalıştığım şey android uygulamasında bir düğmeye basılınca dahili hafızaya txt dosyasını kaydedebilmek. Bunun için ilk önce bir düğme tanımladım ve düğmenin onClick fonksiyonuna dosyayı kaydedecek kodu yazdım.

btnKaydet=(Button) findViewById(R.id.btnKaydet);
btnKaydet.setOnClickListener(new OnClickListener()
{   
    @Override
    public void onClick(View arg0) 
        {
              /*kayıt yapacak kod*/
        }
});

emülatörde çalışırken

BufferedWriter out = new BufferedWriter(new FileWriter("/data/data/com.example.proje51/abc.txt"));          
out.write("abc");
out.close();

kodu ile emülatöre dosya kaydebiliyorum. fakat android telefonda projeyi çalıştırdığım zaman

java.io.FileNotFoundException: /data/data/com.example.proje51/abc.txt (Permission denied)

hatası alıyorum.

İnternette bu iş için şöyle bir kod buldum:

BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(getFilesDir()+File.separator+"abc.txt")));
bufferedWriter.write("abc");
bufferedWriter.close();

Fakat bu seferde

java.io.FileNotFoundException: /null/abc.txt (No such file or directory)

hatası alıyorum. Yani getFilesDir() fonksiyonunun dahili hafıza adresini döndürmesi gerekirken "null" döndürüyor. getFilesDir().getPath() şeklinde yazdığımda ise "Null Pointer Exception" hatası alıyorum. Acaba Android telefonda dahili hafızaya yazmak için ne yapmalıyım?

soruldu: 26 Şub '13, 14:14

ekremk's gravatar image

ekremk
421243436
cevap kabul oranı: 7%

değiştirildi: 27 Şub '13, 01:26


getFilesDir().getPath() ile proje dosyalarının olduğu dizine erişebilirsin.

Android manifest.xml dosyana da

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

bu izinleri eklersen sorunun düzelmesi lazım.

Düzenleme: Örnek (Test ettim) :

btYaz=(Button)findViewById(R.id.button1);
btOku=(Button)findViewById(R.id.button2);

        btYaz.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                try {
                    //Toast.makeText(getApplicationContext(), getFilesDir().getPath()+File.separator+"abc.txt", 0).show();
                    BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(getFilesDir().getPath()+File.separator+"abc.txt")));
                    bufferedWriter.write("def");
                    bufferedWriter.close();
                } catch (IOException e) {
                    Toast.makeText(getApplicationContext(), e.getMessage(), 0).show();
                    e.printStackTrace();
                }
            }
        });
        btOku.setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                try {
                    File file = new File(getFilesDir().getPath()+File.separator+"abc.txt");
                    BufferedReader br = new BufferedReader(new FileReader(file));
                    Toast.makeText(getApplicationContext(), br.readLine(), 0).show();

                }
                catch (Exception e) {
                    Toast.makeText(getApplicationContext(), "Hata : " + e.getMessage(), 0).show();
                    e.printStackTrace();
                }
            }
        });
permanent link

cevaplandı: 27 Şub '13, 00:42

creseos's gravatar image

creseos
2.0k468187
cevap kabul oranı: 37%

değiştirildi: 27 Şub '13, 01:38

İzinler verilmiş durumda. BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(new File(getFilesDir().getPath()+File.separator+"abc.txt"))); bufferedWriter.write("abc"); bufferedWriter.close(); kodu bu şekilde yazdığım zaman "null pointer exception" döndürüyor

(27 Şub '13, 00:57) ekremk ekremk's gravatar image

Bi örnek yaptım test ettim çalışıyor. Cevabı güncelliyorum//

(27 Şub '13, 01:37) creseos creseos's gravatar image

şimdi sıfırdan bir proje açıp sizin kodu denedim çalışıyor. Fakat önceki projemde sürekli null pointer exception hatası alıyorum. Acaba bunun sebebi ne olabilir?

(27 Şub '13, 01:54) ekremk ekremk's gravatar image

Bazen bende de oluyordu o sanırım projeden değil de emülatörden. Normal çalışan kod bazen nullpointerexception diye hata veriyordu. Ben emülatörü restartlayınca düzeliyordu. Yeni proje açmak yerine projeni clean edebilirsin. Kod yazarken bu tür istisnia durumlara dikkat etmelisin

(27 Şub '13, 02:09) creseos creseos's gravatar image
File dir = new File("/data/data/"+ getPackageName() +"/files/" );
try {
     PrintWriter out = new PrintWriter(new FileWriter(dir +"/" +"abc.txt"));
     out.close();
    }catch(Exception ee){ }

bunu dene

permanent link

cevaplandı: 26 Şub '13, 18:33

essp's gravatar image

essp
181239
cevap kabul oranı: 30%

değiştirildi: 26 Şub '13, 18:36

java.io.FileNotFoundException: /data/data/com.example.proje51/abc.txt (Permission denied) hatası alıyorum yine. Android dosya yolunun elle girilmesini değil "Context.getFilesDir().getPath()" kullanarak girilmesini istiyor anladığım kadarıyla. Çünkü sizin verdiğiniz kodu yazdığımda "Do not hardcode "/data/" use Context.getFilesDir().getPath() instead" uyarısı alıyorum.

(26 Şub '13, 22:45) ekremk ekremk's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×818

Soruldu: 26 Şub '13, 14:14

Görüntüleme: 1,298 kez

Son güncelleme: 27 Şub '13, 02:10

powered by BitNami OSQA