android read/write file

0

piszę program który ma zapisać do pliku i potem odczytać to co zapisał.
program wyrzuca wyjątek : java.lang.SecurityException: MODE_WORLD_READABLE (przestarzała metoda i nie działa już)
jak inaczej wczytać dane z pliku?
linia

System.out.println(fIn.read());

daje output "100"
(?)

public void doSth(View v)
    {
        final String FILE_NAME="myfile.txt";

        try{
            FileOutputStream fOut = openFileOutput(FILE_NAME,MODE_PRIVATE);
            String str = "data ABCDEFGHIJKLMNOPRSQUWXYZ";


            fOut.write(str.getBytes());
            fOut.close();


            String message;
            FileInputStream fIn = openFileInput(FILE_NAME);


            System.out.println(fIn.read());
            System.out.println(12345);

        }catch(Exception e){System.out.println(e.toString());}

    }
0

A masz nadane uprawnienia w aplikacji do czytania?

0

 @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch(requestCode)
        {
            case MEMORY_ACCESS:
                if(grantResults.length>0 && grantResults[0]== PackageManager.PERMISSION_GRANTED)
                {

                }
                else
                {
                    Toast.makeText(getApplicationContext(),"jesli nie zostanie wyrazona zgoda na dostep do pamieci nie bedzie mozliwosci zapisania pliku", Toast.LENGTH_LONG).show();
                }
        }
    }

if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)){}
        else
        {
            ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},5);
        }

użyłem czegoś takiego, wzięte z tutorialu, ale program nie pyta o pozwolenie na możliwość pisania ani czytania, tak więc chyba nie mam

0

A w AndroidMsnifest dodałeś?

0

A gdzie Ty korzystasz z tego MODE_WORLD_READABLE ?

0

nigdzie, ale w logach mi taki wyjątek wyrzuca, może to taki hidden use,
w tutorialu w tej linii :

FileInputStream fIn = openFileInput(FILE_NAME);

dodawało się MODE_WORLD_READABLE jako drugi argument, może jest on tam domyślnie?

0

edit już mam

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

, ale teraz wyświetla się toast że nie wyraziłem zgody bez żadnego pytania o nią, zaraz popatrzę czy nie w złym miejscu nie umieściłem tego kodu

1

dodaj

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

fragment w manifest dodany, ale dalej nie działa, coś jest nie tak z kodem w javie, który ma prosić o pozwolenie

import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.Scanner;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if(ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)){}
    else
    {
        ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},5);
    }
    doSth(this);
}




@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    switch(requestCode)
    {
        case 5:
            if(grantResults.length>0 && grantResults[0]== PackageManager.PERMISSION_GRANTED)
            {

            }
            else
            {
                Toast.makeText(getApplicationContext(),"jesli nie zostanie wyrazona zgoda na dostep do pamieci nie bedzie mozliwosci zapisania pliku", Toast.LENGTH_LONG).show();
            }
    }
}
public void doSth(Context context)
{
    final String FILE_NAME="myfile.txt";

    try{
        FileOutputStream fOut = openFileOutput(FILE_NAME,MODE_PRIVATE);
        String str = "data a aaaa";

        fOut.write(str.getBytes());
        fOut.close();

        FileInputStream fIn = openFileInput(FILE_NAME);

        System.out.println(fIn.read());
       
    }catch(Exception e){System.out.println(e.toString());


    }

}

}

0

Spróbuj ręcznie dodać uprawnienia do aplikacji. Wejdź w ustawienia systemu, potem aplikacje, znajdź swoją i poszukaj uprawnień. Spróbuj nadać i otworzyć apkę

0

dodanie uprawnień w ustawieniach nic nie daje
EDIT:

try{
            FileOutputStream fOut = openFileOutput(FILE_NAME,MODE_PRIVATE);
            String str = "data a aaaaaaaaaaaaaaa";


            fOut.write(str.getBytes());
            fOut.close();

            FileInputStream fIn = openFileInput(FILE_NAME);
            InputStreamReader isr = new InputStreamReader(fIn);
            char[] inputBuffer = new char[10];
            isr.read(inputBuffer);
            String readString = new String(inputBuffer);

            System.out.println(readString);

            System.out.println(12345);

        }catch(Exception e){System.out.println(e.toString());

http://www.anddev.org/working_with_files-t115.html

na podstawie tego artykułu zmodyfikowałem kod i działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1