#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");
… Это невозможный путь. Поместите aToast()
в тот блок 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");
для сохранения во внутреннем хранилище. Остальная часть вашего кода может остаться прежней.