Страница 1 из 8

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

Добавлено: 02 май 2012, 23:00
damager82
В этом уроке:
- работаем с файлами


Click here to read this article!

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

Добавлено: 07 май 2012, 00:19
Lynnfield
Простите мне мое нетерпение, но когда ждать следующего урока? Просто мне никак с табами не разобраться, а мне очень надо. =)

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

Добавлено: 07 май 2012, 21:56
damager82
Lynnfield писал(а):Простите мне мое нетерпение, но когда ждать следующего урока? Просто мне никак с табами не разобраться, а мне очень надо. =)
Сегодня был урок. И будет еще парочка по этой теме.

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

Добавлено: 03 июн 2012, 09:28
vyacheslav
Что-то в этом уроке не совсем понятно как работает обработчик солбытий нажатий на клавиши. Это как-то новый метод, в обход слушателя setonclicklistener?!

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

Добавлено: 04 июн 2012, 10:50
damager82
vyacheslav писал(а):Что-то в этом уроке не совсем понятно как работает обработчик солбытий нажатий на клавиши. Это как-то новый метод, в обход слушателя setonclicklistener?!
С 51-го урока я начал использовать этот метод. Но все никак не соберусь написать о нем в уроках про обработчики.

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

Добавлено: 21 июл 2012, 11:20
IlyaZh
Как определить полный путь к файлу, который записан во внутреннюю память? Необходимо скормить его XmlPullParser, но указав URL как Filename - получаю ругань что файла нет.

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

Добавлено: 21 июл 2012, 13:23
rezak90
file.getAbsolutePath() ты об этом? просто не понял твоего выражения "внутренняя память".

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

Добавлено: 21 июл 2012, 15:40
IlyaZh
rezak90 писал(а):file.getAbsolutePath() ты об этом? просто не понял твоего выражения "внутренняя память".
Ну всмысле не на флэшку, чтобы файлом могло только приложение пользоваться. Запись выполняется вот так

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

openFileOutput("appdata.xml", MODE_PRIVATE)
А теперь мне надо этот файл прочитать..

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

Добавлено: 21 июл 2012, 18:33
Finch
/data/data/<package_name>/files
но если файл 6ольшой я 6ы не советовал писать в internal storage
представь се6е 6юджетный телефон со 160 метрами на 6орту(напрмер Galaxy Ace), устанавливаем 10 приложений и места нет и тут ты еще со своими файлами лезешь, делай проверку, если доступно в external storage то пиши туда =)

п.с. ах да и совсем за6ыл вот твой ответ =)

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

Добавлено: 21 июл 2012, 19:41
IlyaZh
Finch писал(а):/data/data/<package_name>/files
но если файл 6ольшой я 6ы не советовал писать в internal storage
представь се6е 6юджетный телефон со 160 метрами на 6орту(напрмер Galaxy Ace), устанавливаем 10 приложений и места нет и тут ты еще со своими файлами лезешь, делай проверку, если доступно в external storage то пиши туда =)

п.с. ах да и совсем за6ыл вот твой ответ =)
Благодарю!

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

Добавлено: 26 июл 2012, 10:50
powercat
Привет.
В этой конструкции

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

// получаем путь к SD
File sdPath = Environment.getExternalStorageDirectory();
// добавляем свой каталог к пути
sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
// создаем каталог
sdPath.mkdirs();
// формируем объект File, который содержит путь к файлу
File sdFile = new File(sdPath, FILENAME_SD);
непонятно, два момента:
1. Почему в строке 4 переменную нельзя описать так sdPath=sdPath + "/" + DIR_SD...это я утрированно пишу, без скобок...Или это вызвано тем, что это не строковая переменная, а типа File, в которой так просто нельзя увеличить путь, как в строковой?

2. В строке 8 зачем создавать объект, который содержит путь к файлу...((( разве нельзя переменно sdPath присвоить этот путь? Проще говоря - не могу понять, зачем вводить дополнительные...эээ....как бы это назвать...кодинг что-ль

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

Добавлено: 26 июл 2012, 11:13
rezak90
с первым могу сказать (на сколько мне известно) что это объект и это же стринг что бы append()'ом можно было добавить, так что приходится только через конструктор.
со-вторым можно, но это уже дело автора, как захотел так и сделал))) может показано для наглядности...

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

Добавлено: 26 июл 2012, 12:25
math64
4-ю строку можно написать в том же виде, что и 8-ю, тогда '/' Андроид сам вставит. Windows в этом случае вставил бы '\\'.
Операцию + можно делать только со строками - поэтому от старого файла берём путь в виде строки, дописываем то, что надо и создаём новый объект.
Переменные sdPath и sdFile - указатели на объект File. В приведённом коде создаются 3 таких объекта. Даже если Вы будете использовать одну переменную-указатель, объектов останется три, два уйдут в мусор.
Второй sdPath создаётся, чтобы создать пути sdPath.mkdirs(); для третьего (sdFile). А экономия на указателе несущественна.

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

Добавлено: 26 июл 2012, 13:54
Finch
powercat, ваше не понимание связано с незнанием языка
1. читайте про Anonymous classes in Java
2. конструктор класса

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

Добавлено: 30 июл 2012, 09:42
damager82
powercat писал(а):Привет.
В этой конструкции

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

// получаем путь к SD
File sdPath = Environment.getExternalStorageDirectory();
// добавляем свой каталог к пути
sdPath = new File(sdPath.getAbsolutePath() + "/" + DIR_SD);
// создаем каталог
sdPath.mkdirs();
// формируем объект File, который содержит путь к файлу
File sdFile = new File(sdPath, FILENAME_SD);
непонятно, два момента:
1. Почему в строке 4 переменную нельзя описать так sdPath=sdPath + "/" + DIR_SD...это я утрированно пишу, без скобок...Или это вызвано тем, что это не строковая переменная, а типа File, в которой так просто нельзя увеличить путь, как в строковой?

2. В строке 8 зачем создавать объект, который содержит путь к файлу...((( разве нельзя переменно sdPath присвоить этот путь? Проще говоря - не могу понять, зачем вводить дополнительные...эээ....как бы это назвать...кодинг что-ль
Я иногда реально пишу кода больше, чем нужно. Но так, чтобы выглядело проще. Это для наглядности. Все таки сайт на новичков рассчитан и сразу грузить их непонятными большими конструкциями - не дело. Если человек знает Java, он сам напишет как ему нужно. Ну а новички со временем придут к своему стилю написания )

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

Добавлено: 09 авг 2012, 12:38
powercat
Finch писал(а):powercat, ваше не понимание связано с незнанием языка
1. читайте про Anonymous classes in Java
2. конструктор класса
Да...язык не знаю, иду слепо...но уже вижу, что за такой язык убивать надо ((( одно извращение с кликами чего стоит....

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

Добавлено: 18 сен 2012, 11:51
di16
все привет! нид ё хэлп... не записывает данные в файл os.writeObject(data); хотя файл создается и data тоже не пустая там хран. список объектов( List<ContactItem> data;)?

public <T> void cacheData(String dataType, String dataSubtype, T data) {

String filename = composeFilename(dataType, dataSubtype);

File file = new File(path, filename);
ObjectOutputStream os = null;
try {
FileOutputStream fs = new FileOutputStream(file);
os = new ObjectOutputStream(fs);
os.writeObject(data);
os.close();

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

}
}

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

Добавлено: 18 сен 2012, 12:17
rezak90
на чём именно ошибка вылетает? могу лишь предположить что необходимо десериализовать объект.

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

Добавлено: 18 сен 2012, 13:21
di16
ошибки то как раз-то никакой не вылетает...все работает...просто файл пустой из-за этого не могу получить данные из него
смотрела пошагам как доходит до os.writeObject(data); сразу перескакивает в catch ..но и ошибок не выдает.. в чем фигня не понимаю...зато когда вместо List<ContactItem> data, List<String> data то все работает и записывает

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

Добавлено: 18 сен 2012, 13:52
math64
То что перескакивает в catch - это и есть ошибка.
А ты научил ContactItem записываться в ObjectOutputStream?
List записывать число элеиентов внури себя а затем записывает элементы.
Если элементы не умеют записываться, то ничего не запишется.