Урок 75. Хранение данных. Работа с файлами.

Обсуждение уроков
Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение altwin » 16 фев 2014, 11:42

_ILYA_ писал(а):Понял в чем была причина возврата пустой строки. Пришлось не много изменить код

Код: Выделить всё

// Открываем поток для чтения
				BufferedReader br = new BufferedReader(new FileReader(sd_file));
				// читаем содержимоe
				String str;
				while((str = br.readLine()) != null)
				{
					result = "" + str;
				}
				
				br.close();
				return result; 
Еще ВОПРОС:
Есть приложение, которое на SD создает директорию и в процессе работы сохраняет туда файлы.
Пользователь пользовался этим приложением достаточно долго и оно создало много файлов. И в один прекрасный день, пользователь решил удалить приложение.
Удалил, но директория с файлами осталась :cry: . Так вот собственно вопрос -как сделать что бы при удалении приложения удалялось все что оно создало в процессе своей работы
Не создавайте хардокрно файлы на карте, вместо этого можно использовать ExternalStorage, и когда пишите файлы сюда: /Android/data/<package_name>/files/ проблем не будет. Конкретнее вот эта штука: ExternalCache, когда пользователь удалит приожение, все файлы удалятся.
Изображение

Masi4
Сообщения: 8
Зарегистрирован: 10 окт 2013, 16:54

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Masi4 » 14 мар 2014, 17:46

Расскажите, пожалуйста, как создать папку во внутренней памяти телефона и далее писать файлы туда?

Пробовал так:

Код: Выделить всё

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");
Каталогов нет...

Masi4
Сообщения: 8
Зарегистрирован: 10 окт 2013, 16:54

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Masi4 » 14 мар 2014, 22:47

Masi4 писал(а):Расскажите, пожалуйста, как создать папку во внутренней памяти телефона и далее писать файлы туда?
Нашёл решение (наверное).

Код: Выделить всё

File file = new File(this.getFilesDir (), "/onemorefolder/");
if (file.mkdirs ()) Log.d ("MyLog", "create");
Я правда не проверял на железках, проверил только на эмуляторе.

kickflip2009
Сообщения: 2
Зарегистрирован: 17 мар 2014, 20:45

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение kickflip2009 » 17 мар 2014, 20:49

У меня выскакивает ошибка что это?
Вложения
java.jpg
java.jpg (222.67 КБ) 14438 просмотров

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Foenix » 17 мар 2014, 21:12

сиди думай.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

kickflip2009
Сообщения: 2
Зарегистрирован: 17 мар 2014, 20:45

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение kickflip2009 » 17 мар 2014, 22:27

Я делал так как написано в уроке.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Foenix » 17 мар 2014, 23:05

kickflip2009 писал(а):Я делал так как написано в уроке.
а мышку подвести к красному а затем загуглить или поискать по форуму - не?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение sae74 » 23 апр 2014, 09:42

Добрый день.
Столкнулся с такой "проблемкой":
Как получить название SD-карты - которая используется в настройках как основная?
У меня есть в телефоне две карты памяти, одна "встроенная" другая "обычная SD".

AlexVinn
Сообщения: 81
Зарегистрирован: 04 апр 2014, 04:56

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение AlexVinn » 30 апр 2014, 21:41

Выдает ошибку в стр. 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]
Тут должна быть подпись.

Viewer
Сообщения: 180
Зарегистрирован: 30 апр 2014, 11:42

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Viewer » 30 апр 2014, 23:02

AlexVinn писал(а):Выдает ошибку в стр. 100
Примерно понимаю почему, но как исправить пока не могу въехать (у меня с фрагментами).
Спс.
Красным - openFileOutput
Пишет - Cannot make a static reference to the non-static method openFileOutput(String, int) from the type ContextWrapper
У вас класс фрагмента объявлен как static и поэтому он не имеет внутренней ссылки на объект внешнего класса в котором определен используемый вами метод openFileOutput поэтому вы не можете его вызывать.
Чтобы вызывать методы контекста (или его наследника Activity) из класса фрагмента, нужно сначала его получить, т.е. вызывать
getActivity().openFileOutput (...

AlexVinn
Сообщения: 81
Зарегистрирован: 04 апр 2014, 04:56

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение AlexVinn » 07 май 2014, 17:21

Вопрос - если я создам ПРИЛОЖЕНИЕМ файл в внутренней памяти (например - file.data), смогу ли я потом найти его сервисом этого приложения только по имени (без всяких путей)? Т.е. пишется ли файл ПОСТОЯННО в одно и тоже место для приложения. Вообщем, нужно в маленьком файлике хранить данные и настройки для приложения и сервиса ЭТОГО приложения, который постоянно крутится в памяти и периодически смотрит в этот файл. Может быть есть более грамотные способы реализации этой задачи ?

Всем заранее спасибо за ответы.
Тут должна быть подпись.

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение sae74 » 07 май 2014, 17:25

AlexVinn писал(а):Вопрос - если я создам ПРИЛОЖЕНИЕМ файл в внутренней памяти (например - file.data), смогу ли я потом найти его сервисом этого приложения только по имени (без всяких путей)? Т.е. пишется ли файл ПОСТОЯННО в одно и тоже место для приложения. Вообщем, нужно в маленьком файлике хранить данные и настройки для приложения и сервиса ЭТОГО приложения, который постоянно крутится в памяти и периодически смотрит в этот файл. Может быть есть более грамотные способы реализации этой задачи ?

Всем заранее спасибо за ответы.
для хранения настроек я сделал так http://startandroid.ru/ru/uroki/vse-uro ... ivity.html

AlexVinn
Сообщения: 81
Зарегистрирован: 04 апр 2014, 04:56

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение AlexVinn » 07 май 2014, 17:55

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

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение aleksbim » 21 май 2014, 01:10

Как в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE ?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?

sae74
Сообщения: 31
Зарегистрирован: 28 фев 2013, 15:14

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение sae74 » 21 май 2014, 07:06

aleksbim писал(а):Как в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE ?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?
add - uses Permissions - Выбрать пункт : "android.permission.WRITE_EXTERNAL_STORAGE"

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение klblk » 21 май 2014, 07:41

aleksbim писал(а):Как в манифест добавить разрешение на работу с файлами на SD - android.permission.WRITE_EXTERNAL_STORAGE ?
Открываем манифест, открываем вкладку Permissions.
Подскажите, что дальше?
Add->User Permission->Name->android.permission.WRITE_EXTERNAL_STORAGE
но проще просто в ручную в xml прописать:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

upd:опоздал на полчасика=)

kvg_ua
Сообщения: 5
Зарегистрирован: 10 июн 2014, 21:05

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение kvg_ua » 08 июл 2014, 15:09

Всем добрый день!
У меня такой вопрос: при запуске приложения проверяется наличие папки на карте памяти. если папки не существует (приложение запущено впервые или папка была удалена пользователем) программа должна создать эту папку и скопировать в нее определенный файл, который в дальнейшем будет читаться приложением. Так вот, в какой папке проекта должен храниться файл и как его скопировать на карту памяти? Я так понял, что файл нужно положить в папку "assets", но как его скопировать оттуда на карту памяти, понять не могу!
Заранее спасибо за помощь!

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение klblk » 08 июл 2014, 18:39

kvg_ua писал(а):Всем добрый день!
У меня такой вопрос: при запуске приложения проверяется наличие папки на карте памяти. если папки не существует (приложение запущено впервые или папка была удалена пользователем) программа должна создать эту папку и скопировать в нее определенный файл, который в дальнейшем будет читаться приложением. Так вот, в какой папке проекта должен храниться файл и как его скопировать на карту памяти? Я так понял, что файл нужно положить в папку "assets", но как его скопировать оттуда на карту памяти, понять не могу!
Заранее спасибо за помощь!
первая гугл ссылка по запросу "android copy file from assets":
http://stackoverflow.com/questions/4447 ... -to-sdcard

kvg_ua
Сообщения: 5
Зарегистрирован: 10 июн 2014, 21:05

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение kvg_ua » 09 июл 2014, 01:22

klblk писал(а):
первая гугл ссылка по запросу "android copy file from assets":
http://stackoverflow.com/questions/4447 ... -to-sdcard
Огромное спасибо! Это то, что мне нужно! А я 2 дня пытался найти ответ, а, оказывается, я просто не правильно задавал вопрос!!!

Lers
Сообщения: 1
Зарегистрирован: 10 июл 2014, 13:06

Re: Урок 75. Хранение данных. Работа с файлами.

Сообщение Lers » 10 июл 2014, 13:23

Помогите плз. я хочу чтобы из .txt файла построчно копировались строки в массив/List.
Еще вопрос по самому файлу, чтобы с ним работать нужно закинуть его в папку assets? И как указывать путь к нему при чтении данных из него?

Ответить