Не создавайте хардокрно файлы на карте, вместо этого можно использовать ExternalStorage, и когда пишите файлы сюда: /Android/data/<package_name>/files/ проблем не будет. Конкретнее вот эта штука: ExternalCache, когда пользователь удалит приожение, все файлы удалятся._ILYA_ писал(а):Понял в чем была причина возврата пустой строки. Пришлось не много изменить кодЕще ВОПРОС:Код: Выделить всё
// Открываем поток для чтения BufferedReader br = new BufferedReader(new FileReader(sd_file)); // читаем содержимоe String str; while((str = br.readLine()) != null) { result = "" + str; } br.close(); return result;
Есть приложение, которое на SD создает директорию и в процессе работы сохраняет туда файлы.
Пользователь пользовался этим приложением достаточно долго и оно создало много файлов. И в один прекрасный день, пользователь решил удалить приложение.
Удалил, но директория с файлами осталась . Так вот собственно вопрос -как сделать что бы при удалении приложения удалялось все что оно создало в процессе своей работы
Урок 75. Хранение данных. Работа с файлами.
Re: Урок 75. Хранение данных. Работа с файлами.
Re: Урок 75. Хранение данных. Работа с файлами.
Расскажите, пожалуйста, как создать папку во внутренней памяти телефона и далее писать файлы туда?
Пробовал так:
Каталогов нет...
Пробовал так:
Код: Выделить всё
File dir = new File ("folder");
Log.d ("MyLog", dir.toString ());
if (dir.mkdir ()) Log.d ("MyLog", "Dir create");
if (dir.mkdirs ()) Log.d ("MyLog", "Dirs create");
if (dir.isDirectory ()) Log.d ("MyLog", "Dir present");
Re: Урок 75. Хранение данных. Работа с файлами.
Нашёл решение (наверное).Masi4 писал(а):Расскажите, пожалуйста, как создать папку во внутренней памяти телефона и далее писать файлы туда?
Код: Выделить всё
File file = new File(this.getFilesDir (), "/onemorefolder/");
if (file.mkdirs ()) Log.d ("MyLog", "create");
-
- Сообщения: 2
- Зарегистрирован: 17 мар 2014, 20:45
Re: Урок 75. Хранение данных. Работа с файлами.
У меня выскакивает ошибка что это?
- Вложения
-
- java.jpg (222.67 КБ) 14450 просмотров
Re: Урок 75. Хранение данных. Работа с файлами.
сиди думай.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
-
- Сообщения: 2
- Зарегистрирован: 17 мар 2014, 20:45
Re: Урок 75. Хранение данных. Работа с файлами.
Я делал так как написано в уроке.
Re: Урок 75. Хранение данных. Работа с файлами.
а мышку подвести к красному а затем загуглить или поискать по форуму - не?kickflip2009 писал(а):Я делал так как написано в уроке.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Урок 75. Хранение данных. Работа с файлами.
Добрый день.
Столкнулся с такой "проблемкой":
Как получить название SD-карты - которая используется в настройках как основная?
У меня есть в телефоне две карты памяти, одна "встроенная" другая "обычная SD".
Столкнулся с такой "проблемкой":
Как получить название SD-карты - которая используется в настройках как основная?
У меня есть в телефоне две карты памяти, одна "встроенная" другая "обычная SD".
Re: Урок 75. Хранение данных. Работа с файлами.
Выдает ошибку в стр. 100
Примерно понимаю почему, но как исправить пока не могу въехать (у меня с фрагментами).
Спс.
Красным - openFileOutput
Пишет - Cannot make a static reference to the non-static method openFileOutput(String, int) from the type ContextWrapper
MainActivity.java
[syntax=java5]package com.example.p0751_files;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements
OnClickListener {
final String LOG_TAG = "myLogs";
final String FILENAME = "file";
final String DIR_SD = "MyFiles";
final String FILENAME_SD = "fileSD";
Button btnWrite;
Button btnRead;
Button btnWriteSD;
Button btnReadSD;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
btnWrite = (Button) rootView.findViewById(R.id.btnWrite);
btnRead = (Button) rootView.findViewById(R.id.btnRead);
btnWriteSD = (Button) rootView.findViewById(R.id.btnWriteSD);
btnReadSD = (Button) rootView.findViewById(R.id.btnReadSD);
btnWrite.setOnClickListener(this);
btnRead.setOnClickListener(this);
btnWriteSD.setOnClickListener(this);
btnReadSD.setOnClickListener(this);
return rootView;
}
void writeFile() {
try {
// отрываем поток для записи
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
openFileOutput(FILENAME, MODE_PRIVATE)));
// пишем данные
bw.write("Содержимое файла");
// закрываем поток
bw.close();
Log.d(LOG_TAG, "Файл записан");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
void readFile() {
try {
// открываем поток для чтения
BufferedReader br = new BufferedReader(new InputStreamReader(
openFileInput(FILENAME)));
String str = "";
// читаем содержимое
while ((str = br.readLine()) != null) {
Log.d(LOG_TAG, str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
void writeFileSD() {
// проверяем доступность SD
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Log.d(LOG_TAG,
"SD-карта не доступна: "
+ Environment.getExternalStorageState());
return;
}
// получаем путь к SD
File sdPath = Environment.getExternalStorageDirectory();
// добавляем свой каталог к пути
sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
// создаем каталог
sdPath.mkdirs();
// формируем объект File, который содержит путь к файлу
File sdFile = new File(sdPath, FILENAME_SD);
try {
// открываем поток для записи
BufferedWriter bw = new BufferedWriter(new FileWriter(sdFile));
// пишем данные
bw.write("Содержимое файла на SD");
// закрываем поток
bw.close();
Log.d(LOG_TAG,
"Файл записан на SD: " + sdFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
void readFileSD() {
// проверяем доступность SD
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Log.d(LOG_TAG,
"SD-карта не доступна: "
+ Environment.getExternalStorageState());
return;
}
// получаем путь к SD
File sdPath = Environment.getExternalStorageDirectory();
// добавляем свой каталог к пути
sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
// формируем объект File, который содержит путь к файлу
File sdFile = new File(sdPath, FILENAME_SD);
try {
// открываем поток для чтения
BufferedReader br = new BufferedReader(new FileReader(sdFile));
String str = "";
// читаем содержимое
while ((str = br.readLine()) != null) {
Log.d(LOG_TAG, str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnWrite:
writeFile();
break;
case R.id.btnRead:
readFile();
break;
case R.id.btnWriteSD:
writeFileSD();
break;
case R.id.btnReadSD:
readFileSD();
break;
}
}
}
}
[/syntax]
Примерно понимаю почему, но как исправить пока не могу въехать (у меня с фрагментами).
Спс.
Красным - openFileOutput
Пишет - Cannot make a static reference to the non-static method openFileOutput(String, int) from the type ContextWrapper
MainActivity.java
[syntax=java5]package com.example.p0751_files;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements
OnClickListener {
final String LOG_TAG = "myLogs";
final String FILENAME = "file";
final String DIR_SD = "MyFiles";
final String FILENAME_SD = "fileSD";
Button btnWrite;
Button btnRead;
Button btnWriteSD;
Button btnReadSD;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container,
false);
btnWrite = (Button) rootView.findViewById(R.id.btnWrite);
btnRead = (Button) rootView.findViewById(R.id.btnRead);
btnWriteSD = (Button) rootView.findViewById(R.id.btnWriteSD);
btnReadSD = (Button) rootView.findViewById(R.id.btnReadSD);
btnWrite.setOnClickListener(this);
btnRead.setOnClickListener(this);
btnWriteSD.setOnClickListener(this);
btnReadSD.setOnClickListener(this);
return rootView;
}
void writeFile() {
try {
// отрываем поток для записи
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
openFileOutput(FILENAME, MODE_PRIVATE)));
// пишем данные
bw.write("Содержимое файла");
// закрываем поток
bw.close();
Log.d(LOG_TAG, "Файл записан");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
void readFile() {
try {
// открываем поток для чтения
BufferedReader br = new BufferedReader(new InputStreamReader(
openFileInput(FILENAME)));
String str = "";
// читаем содержимое
while ((str = br.readLine()) != null) {
Log.d(LOG_TAG, str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
void writeFileSD() {
// проверяем доступность SD
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Log.d(LOG_TAG,
"SD-карта не доступна: "
+ Environment.getExternalStorageState());
return;
}
// получаем путь к SD
File sdPath = Environment.getExternalStorageDirectory();
// добавляем свой каталог к пути
sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
// создаем каталог
sdPath.mkdirs();
// формируем объект File, который содержит путь к файлу
File sdFile = new File(sdPath, FILENAME_SD);
try {
// открываем поток для записи
BufferedWriter bw = new BufferedWriter(new FileWriter(sdFile));
// пишем данные
bw.write("Содержимое файла на SD");
// закрываем поток
bw.close();
Log.d(LOG_TAG,
"Файл записан на SD: " + sdFile.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
void readFileSD() {
// проверяем доступность SD
if (!Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)) {
Log.d(LOG_TAG,
"SD-карта не доступна: "
+ Environment.getExternalStorageState());
return;
}
// получаем путь к SD
File sdPath = Environment.getExternalStorageDirectory();
// добавляем свой каталог к пути
sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
// формируем объект File, который содержит путь к файлу
File sdFile = new File(sdPath, FILENAME_SD);
try {
// открываем поток для чтения
BufferedReader br = new BufferedReader(new FileReader(sdFile));
String str = "";
// читаем содержимое
while ((str = br.readLine()) != null) {
Log.d(LOG_TAG, str);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnWrite:
writeFile();
break;
case R.id.btnRead:
readFile();
break;
case R.id.btnWriteSD:
writeFileSD();
break;
case R.id.btnReadSD:
readFileSD();
break;
}
}
}
}
[/syntax]
Тут должна быть подпись.
Re: Урок 75. Хранение данных. Работа с файлами.
У вас класс фрагмента объявлен как static и поэтому он не имеет внутренней ссылки на объект внешнего класса в котором определен используемый вами метод openFileOutput поэтому вы не можете его вызывать.AlexVinn писал(а):Выдает ошибку в стр. 100
Примерно понимаю почему, но как исправить пока не могу въехать (у меня с фрагментами).
Спс.
Красным - openFileOutput
Пишет - Cannot make a static reference to the non-static method openFileOutput(String, int) from the type ContextWrapper
Чтобы вызывать методы контекста (или его наследника Activity) из класса фрагмента, нужно сначала его получить, т.е. вызывать
getActivity().openFileOutput (...
Re: Урок 75. Хранение данных. Работа с файлами.
Вопрос - если я создам ПРИЛОЖЕНИЕМ файл в внутренней памяти (например - file.data), смогу ли я потом найти его сервисом этого приложения только по имени (без всяких путей)? Т.е. пишется ли файл ПОСТОЯННО в одно и тоже место для приложения. Вообщем, нужно в маленьком файлике хранить данные и настройки для приложения и сервиса ЭТОГО приложения, который постоянно крутится в памяти и периодически смотрит в этот файл. Может быть есть более грамотные способы реализации этой задачи ?
Всем заранее спасибо за ответы.
Всем заранее спасибо за ответы.
Тут должна быть подпись.
Re: Урок 75. Хранение данных. Работа с файлами.
для хранения настроек я сделал так http://startandroid.ru/ru/uroki/vse-uro ... ivity.htmlAlexVinn писал(а):Вопрос - если я создам ПРИЛОЖЕНИЕМ файл в внутренней памяти (например - file.data), смогу ли я потом найти его сервисом этого приложения только по имени (без всяких путей)? Т.е. пишется ли файл ПОСТОЯННО в одно и тоже место для приложения. Вообщем, нужно в маленьком файлике хранить данные и настройки для приложения и сервиса ЭТОГО приложения, который постоянно крутится в памяти и периодически смотрит в этот файл. Может быть есть более грамотные способы реализации этой задачи ?
Всем заранее спасибо за ответы.
Re: Урок 75. Хранение данных. Работа с файлами.
Файл будет меняться сервисом этого приложения, когда само приложение будет закрыто с интернета. Будет разное количество данных в полях и т.д. Возможно ???
Тут должна быть подпись.
Re: Урок 75. Хранение данных. Работа с файлами.
Как в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE ?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?
Re: Урок 75. Хранение данных. Работа с файлами.
add - uses Permissions - Выбрать пункт : "android.permission.WRITE_EXTERNAL_STORAGE"aleksbim писал(а):Как в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE ?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?
Re: Урок 75. Хранение данных. Работа с файлами.
Add->User Permission->Name->android.permission.WRITE_EXTERNAL_STORAGEaleksbim писал(а):Как в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE ?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?
но проще просто в ручную в xml прописать:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
upd:опоздал на полчасика=)
Re: Урок 75. Хранение данных. Работа с файлами.
Всем добрый день!
У меня такой вопрос: при запуске приложения проверяется наличие папки на карте памяти. если папки не существует (приложение запущено впервые или папка была удалена пользователем) программа должна создать эту папку и скопировать в нее определенный файл, который в дальнейшем будет читаться приложением. Так вот, в какой папке проекта должен храниться файл и как его скопировать на карту памяти? Я так понял, что файл нужно положить в папку "assets", но как его скопировать оттуда на карту памяти, понять не могу!
Заранее спасибо за помощь!
У меня такой вопрос: при запуске приложения проверяется наличие папки на карте памяти. если папки не существует (приложение запущено впервые или папка была удалена пользователем) программа должна создать эту папку и скопировать в нее определенный файл, который в дальнейшем будет читаться приложением. Так вот, в какой папке проекта должен храниться файл и как его скопировать на карту памяти? Я так понял, что файл нужно положить в папку "assets", но как его скопировать оттуда на карту памяти, понять не могу!
Заранее спасибо за помощь!
Re: Урок 75. Хранение данных. Работа с файлами.
первая гугл ссылка по запросу "android copy file from assets":kvg_ua писал(а):Всем добрый день!
У меня такой вопрос: при запуске приложения проверяется наличие папки на карте памяти. если папки не существует (приложение запущено впервые или папка была удалена пользователем) программа должна создать эту папку и скопировать в нее определенный файл, который в дальнейшем будет читаться приложением. Так вот, в какой папке проекта должен храниться файл и как его скопировать на карту памяти? Я так понял, что файл нужно положить в папку "assets", но как его скопировать оттуда на карту памяти, понять не могу!
Заранее спасибо за помощь!
http://stackoverflow.com/questions/4447 ... -to-sdcard
Re: Урок 75. Хранение данных. Работа с файлами.
Огромное спасибо! Это то, что мне нужно! А я 2 дня пытался найти ответ, а, оказывается, я просто не правильно задавал вопрос!!!klblk писал(а):
первая гугл ссылка по запросу "android copy file from assets":
http://stackoverflow.com/questions/4447 ... -to-sdcard
Re: Урок 75. Хранение данных. Работа с файлами.
Помогите плз. я хочу чтобы из .txt файла построчно копировались строки в массив/List.
Еще вопрос по самому файлу, чтобы с ним работать нужно закинуть его в папку assets? И как указывать путь к нему при чтении данных из него?
Еще вопрос по самому файлу, чтобы с ним работать нужно закинуть его в папку assets? И как указывать путь к нему при чтении данных из него?