Android Studio - txt файл - Подсчет внутреннего файла - PullRequest
0 голосов
/ 19 января 2019

Я новичок в программировании в Android Studio. Я хочу сделать apk, который работает как описано ниже:

  • нажмите кнопку
  • целое число 1 сохраняется в текстовый файл
  • если я закрою apk, снова открою и снова нажму кнопку, я получу номер 2 в текстовый файл и этот процесс повторить (3,4,5 ... т. д.).

Что мне нужно сделать (в программе):

  1. Создать файл, если он не существует
  2. Посмотрите, если txt. В файле уже есть какое-то число и его число +1, а если его нет (файл txt пуст), мне нужно добавить целое значение 1 в txt. файл.

    Ниже приведена моя программа, у меня проблема с public void length () - при тестировании программы с log.d всегда показывался пустой файл, но я проверял txt. файл в проводнике файлов устройства и номер 1 внутри txt.file. Я также пытался с BufferdReader (br.readLine ()) и получить тот же результат. Я не знаю, в чем проблема ...

public class MainActivity extends AppCompatActivity {

    Button btn;
    private static int Counter = 0;
    private static final String FILE_NAME = "data.txt";
    private static String TAG="MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Counter++;
                Log.d(TAG, "onClick: counter "+Counter);
                saveChec();
                Lengt();
                //load();
                // subSu();
            }
        });
    }

    private void subSu() {

    }

    public void Lengt(){
        long length = new File(getFilesDir().getAbsolutePath() + FILE_NAME).length();
        if (length == 0){
            //get alvays empty..
            Log.d(TAG, "Buff: empty ");
            save(); //add value 1 to txt file
            
        }else{
            Log.d(TAG, "Buff: full");
        }
    }

    public void saveChec() {

        FileOutputStream fos = null;

        try {
            fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
            Log.d(TAG, "saveChec: crated file ");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        // return;

    }

    public void load() {

        FileInputStream fis = null;

        try {
            fis = openFileInput(FILE_NAME);
            InputStreamReader isr = new InputStreamReader(fis);
            BufferedReader br = new BufferedReader(isr);
           //get alvays null
            if (br.readLine() == null) {
                Log.d(TAG, "load: empty file ");
                fis.close();
                save();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    private void save() {

        FileOutputStream fos = null;

        try {
            fos = openFileOutput(FILE_NAME, MODE_PRIVATE);
            int number = 1;
            String numberAsString = Integer.toString(number);
             fos.write(numberAsString.getBytes());
            Log.d(TAG, "save: numberAsString "+numberAsString);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
       // return;
    }
}

Спасибо за ответы!

Ответы [ 2 ]

0 голосов
/ 19 января 2019

Вам нужно использовать файл? Я бы использовал Shared Preferences для хранения этого значения, так как это просто примитивное значение.

0 голосов
/ 19 января 2019

Используйте этот код вместо: -

public void SaveFile()
{
    try {
            //Getting Internal Storage
            File file = new File(Environment.getExternalStorageDirectory(),"");
            File dfile = new File(file+"/data.txt");
            FileWriter write = null;
            //if File Does Exists
            if (!dfile.exists()) {
                write = new FileWriter(file+"/data.txt");
                write.write("1");
                write.close();
            }
            else{
                FileReader read = new FileReader(dfile);
                BufferedReader br = new BufferedReader(read);
                String snum = br.readLine();
                if(snum!=null) {
                    //Converting Sring to Integer
                    int num = Integer.parseInt(snum);
                    num++;
                    write = new FileWriter(file+"/data.txt");
                    write.write(String.valueOf(num));
                    write.close();
                }
                else
                {                    
                    write = new FileWriter(file+"/data.txt");
                    write.write("1");
                    write.close();
                }
            }
        }catch (IOException ex){}
}

Добавить эти разрешения в файл манифеста: -

<uses-permission android:name="READ_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="WRITE_EXTERNAL_STORAGE"></uses-permission>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...