запись и сохранение файла в приложении для Android

#android #file #filewriter

#Android #файл #filewriter

Вопрос:

я пытаюсь записать файл при Save_btn нажатии кнопки, однако, когда я запускаю приложение, оно работает плавно, без ошибок, но файл нигде не найден.

Я пытаюсь выполнить запись во внутреннюю память устройства. записываемый текст находится в поле edittext. я бы хотел, чтобы этот текст из EditText был записан в файл

Я включил код, который я использую ниже;

 Save_btn = (Button) findViewById(R.id.g);
    Save_btn.setOnClickListener(new View.OnClickListener() {
                                    @Override
                                    public void onClick(View views) {
                                        TextView CodeView = (TextView) findViewById(R.id.Code_Viewer);
                                        CodeView.setText(CodeView.getText());
                                        try {
                                            String etName = CodeView.getText().toString();
                                            if (!etName.trim().equals("")) {
                                                File file = new File("/Documents/test.txt");

                                                //if file doesnt exists, then create it
                                                if (!file.exists()) {
                                                    file.createNewFile();
                                                }


                                                FileWriter fileWritter = new FileWriter(file.getName(), true);
                                                BufferedWriter bufferWritter = new BufferedWriter(fileWritter);
                                                bufferWritter.write(etName);
                                                bufferWritter.close();
                                            }
                                        } catch (IOException e) {

                                            e.printStackTrace();
                                        }
                                    }
                                }
    );
  

Будем признательны за любые советы о том, как правильно записать файл.

Заранее спасибо.

Комментарии:

1. во-первых, где вы хотите сохранить свой файл? чего вы пытаетесь достичь? developer.android.com/guide/topics/data/data-storage.html

2. Я пытаюсь выполнить запись во внутреннюю память устройства. записываемый текст находится в поле edittext. я бы хотел, чтобы этот текст из EditText был записан в файл

3. Нет File file = new File("/Documents/test.txt"); … Это невозможный путь. Поместите a Toast() в тот блок catch, который отображается e.getMessage() .

4. if (!file.exists()) { file.createNewFile(); } . Удалите код шляпы. Это бесполезно.

Ответ №1:

замените этот код своим :

     Save_btn = (Button) findViewById(R.id.g);
    Save_btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View views) {
                TextView CodeView = (TextView) findViewById(R.id.Code_Viewer);
                CodeView.setText(CodeView.getText());
                String etName = CodeView.getText().toString();

                File dir = new File(getFilesDir(), "yourfolder");
                if(!dir.exists())
                {
                    dir.mkdirs();
                }
                String textFileName="textFile.txt";
                File file = new File(dir.getPath(), textFileName );
                if(file.exists())
                {
                    file.delete();
                }
                try {
                    FileWriter fw = new FileWriter(file);
                    BufferedWriter bw = new BufferedWriter(fw);
                    bw.write(etName);
                    bw.close();

                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }


            }
        }
    );
  

вы должны обратить внимание на эти моменты :

  • этот код создаст файл в /data/data/[имя вашего пакета приложения]/files/[ваша папка] / [ваше текстовое имя файла]
  • он всегда удаляет ваш файл, если имя файла было одинаковым, поэтому вы должны получить уникальное имя для каждого из них.(вы можете указать дату и время в имени файла)

Комментарии:

1. Спасибо за предложение, все еще не могу увидеть каталог для приложения

2. вы используете физический телефон или эмулятор?

3. Физический телефон Huawei P9

4. У меня его нет, имя пакета не является каталогом

5. поместите это ** Log.i(«FilePath» , file.getPath()); ** после ** File file = new File(dir.getPath(), textFileName ); ** и проверьте ваш logcat с помощью info filter , он должен показать вам, где сохранен файл…

Ответ №2:

Я не уверен, что это может сработать, потому что путь к файлу, который вы указываете, является а) абсолютным и б) указывает на каталог, для которого у вас, вероятно, нет разрешения на запись.

 File file = new File("/Documents/test.txt");
  

Это ссылается на Documents папку в корневом каталоге файловой системы, а не на файлы ваших приложений.

Если вы хотите сохранить его локально для использования в своем собственном приложении, вы можете попробовать Context#getFilesDir, например

 File file = new File(context.getFilesDirectory(), "yourfile.txt");
  

В случае, если вы хотите сохранить его где-то, где другие приложения могут его использовать, вам может потребоваться более сложный подход, например, FileProvider.

Комментарии:

1. При попытке этого выдает ошибку «не удается разрешить контекст символа»?

2. Делайте это без контекста. Это неявно.

3. Ваша активность — это контекст (как и ваше приложение), а ваш фрагмент имеет метод getContext() . Попробуйте final Context context = this; перед обработчиком щелчка, если это происходит в действии. Или используйте метод greenapps.

Ответ №3:

Вы должны использовать

File file = new File(context.getFilesDir(), "test.txt");

вместо

File file = new File("/Documents/test.txt");

для сохранения во внутреннем хранилище. Остальная часть вашего кода может остаться прежней.