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

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

Добавлено: 26 окт 2013, 00:09
_ILYA_
почему при записи на SD выбрасывает исключение ? :o
Тестировал на реальном устройстве android2.3.6


скажите как записывать на SD/считывать c SD, массивы чисел?
и как можно посмотреть список файлов в определенной директории?

Да и еще, в с++ я могу сохранять, данные (точнее работать с потоками) из классов, перегружая операторы << и >>. В java есть что то подобное?

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

Добавлено: 08 ноя 2013, 14:11
huligan
Всем привет. У меня вопрос есть по хранению данных:
Я создаю плейлист. Создание плейлиста выглядит вот так (обрывок из кода):

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

            
File file = new File(Environment.getExternalStorageDirectory() + "/Music","Test.m3u");
PrintWriter writer = new PrintWriter(file, "Unicode");
.....
    writer.println(PathToSong.toString()+"\r");
....
writer.flush();
writer.close();
Файл записывается в нужную папку, я вижу его через файловый менеджер. Но беда в том, что медиапроигрыватели не видят этот список воспроизведения.
Если открыть файл через файловый менеджер (File Commander: аля Total Commander для Android), то песни проигрываются через эту программу, а если попытаться "открыть с помощью" проигрывателя, то не открывается(если через файловый менеджер, сами проигрывателя просто не видят список).
Бывало так, что, при записи файла через дебаггер (Android Studio), проигрыватели видели файл и все проигрывалось. В общем, если проигрыватель видит файл, то он его проигрывает (например Play Music).
Что может быть не так? Могу дать больше информации, но не знаю какой :)
Так сложилось, что я сначала написал код, а потом прочитал этот урок, поэтому не знаю разницы в записи файлов через PrintWriter и BufferedWriter.

Программу тестил на Nexus 4 Android 4.3.

Заранее спасибо за совет, помощь.

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

Добавлено: 17 ноя 2013, 02:04
SPAWN
Народ, кто знает как узнать дату создания файла. Не последней модификации (file.lastModified()).

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

Добавлено: 17 ноя 2013, 02:07
SPAWN
_ILYA_ писал(а):почему при записи на SD выбрасывает исключение ? :o
Тестировал на реальном устройстве android2.3.6


скажите как записывать на SD/считывать c SD, массивы чисел?
и как можно посмотреть список файлов в определенной директории?

Да и еще, в с++ я могу сохранять, данные (точнее работать с потоками) из классов, перегружая операторы << и >>. В java есть что то подобное?
По поводу исключения. В манифесте стоит разрешение на запись?

Что бы посмотреть список файлов, нужно выполнить метод file.listFiles(), который вернет массив файлов.

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

Добавлено: 17 ноя 2013, 11:56
trew
SPAWN писал(а):Народ, кто знает как узнать дату создания файла. Не последней модификации (file.lastModified()).
ссылка

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

Добавлено: 22 янв 2014, 15:46
Gary1210
А если у меня нет раздела /data/data/... ? Хотя функция getFilesDir() возвращает именно его... В результате файлы где-то создаются, но записывать содержимое не хотят. Или тут что-то еще?
Аппарат Samsung Tab 3 имеет похожий раздел /Android/data/..., но файлов там нет.
Спасибо.

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

Добавлено: 22 янв 2014, 18:24
Foenix
откуда вы знаете, что нет? на телефоне вы увидите эту папку, если он рутован, если хотите увидеть - запустите прогу н а эмуляторе

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

Добавлено: 23 янв 2014, 03:50
Gary1210
Foenix писал(а):откуда вы знаете, что нет? на телефоне вы увидите эту папку, если он рутован, если хотите увидеть - запустите прогу н а эмуляторе
За рутованность - спасибо, но размеры все-таки нулевые - не пишутся файлы однако...

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

Добавлено: 23 янв 2014, 10:27
Foenix
ну дык это нужно отдельно разбираться. если отлаживаешь на телефоне - попробуй записать для начала файл в общедоступную папку (чтоб виден был 100%) и отлаживай код (либо тут выкладывай с логами), поставь вывод в лог того, что в файл записываешь - и проверишь.

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

Добавлено: 23 янв 2014, 11:05
Gary1210
Foenix писал(а):ну дык это нужно отдельно разбираться. если отлаживаешь на телефоне - попробуй записать для начала файл в общедоступную папку (чтоб виден был 100%) и отлаживай код (либо тут выкладывай с логами), поставь вывод в лог того, что в файл записываешь - и проверишь.
Извините, я уже перестаю понимать то, что, казалось, понимал.

Моя программа ДОЛЖНА записать бинарный файл. Система всегда предлагает его писать в предопределенное место. При попытке записи файл создается, а при попытке чтения сообщает, что размер файла нулевой.

В какую общедоступную папку я могу записать файл своей программой? И что логить, если в файл ничего не попало?

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

Добавлено: 23 янв 2014, 11:13
Foenix
Система предлагает? а ты предложи свой путь.
что значит ДОЛЖНа записать? ты же что-то туда передаешь? выводи это перед записью в лог.
В какую папку? в папку на флешке, например.
Откуда я знаю что у тебя туда должно попасть и "не попало"? может быть ты и передаешь там null какой-нибудь?

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

Добавлено: 23 янв 2014, 11:25
klblk
для получения доступа к sd карте:
1) в манифесте: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2) в коде для получения пути: Environment.getExternalStorageDirectory().getPath() (вернет что-то типа /mnt/sdcard/, к этой папке уже есть доступ из filemanager'ов)
3) проверяете действительно ли программа что-то создаёт в данной папке

а "логить" хотя бы: myFile.exists()

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

Добавлено: 23 янв 2014, 11:27
Foenix
да экзистс у него файл.. логить надо то, что туда передается

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

Добавлено: 23 янв 2014, 12:10
Gary1210
Foenix писал(а):Система предлагает? а ты предложи свой путь.
что значит ДОЛЖНа записать? ты же что-то туда передаешь? выводи это перед записью в лог.
В какую папку? в папку на флешке, например.
Откуда я знаю что у тебя туда должно попасть и "не попало"? может быть ты и передаешь там null какой-нибудь?
Да как предложить-то, если fileOutputStream требует простого имени, без пути.

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

Добавлено: 23 янв 2014, 12:25
KamiSempai
Проверьте запись файла по шагам, через отладку.
Возможно, при попытке записи возникает исключение, и по всей вероятности вы заключили весь код в try catch c полным игнорированием всех исключений. В результате программа не вылетает, а код записи в файл не отрабатывает.

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

Добавлено: 23 янв 2014, 12:37
Foenix
Gary1210 писал(а):
Foenix писал(а):Система предлагает? а ты предложи свой путь.
что значит ДОЛЖНа записать? ты же что-то туда передаешь? выводи это перед записью в лог.
В какую папку? в папку на флешке, например.
Откуда я знаю что у тебя туда должно попасть и "не попало"? может быть ты и передаешь там null какой-нибудь?
Да как предложить-то, если fileOutputStream требует простого имени, без пути.
вы данный урок читали?

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

 // отрываем поток для записи
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(
          openFileOutput(FILENAME, MODE_PRIVATE)));

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

Добавлено: 23 янв 2014, 13:13
Gary1210
Спасибо всем, кто принял участие.

File f = new File(fileName);
if(!f.exists() || f.length() == 0)
throw new FileNotFoundException(fileName);

Вот этот блок все портил. И false, и 0 одновременно.
А почему портил - не понимаю. Но это будет уже другая история.

Еще раз всем спасибо.

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

Добавлено: 04 фев 2014, 13:03
Gary1210
Помогите, кто может.

Что тут не так? Директория не создается

Это из манифеста:

<uses-permission
android:name="WRITE_EXTERNAL_STORAGE"
/>

А это из текста:

if(!Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED))
return;

File file = new File(
Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "myFiles");
if(!file.exists())
{
if(!file.mkdir())
Log.d("MY_LOG", "false");
}

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

Добавлено: 16 фев 2014, 00:42
_ILYA_
Ни как не пойму, почему при чтении с SD возвращает пустую строку

вот код метода, для чтения с SD

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

 
// Считываниe с SD
		public static String readFileSD(String file_name)
		{
			String result = null;
		
			// Проверка доступности SD
			if(!Environment.getExternalStorageState().equals(
					Environment.MEDIA_MOUNTED))
			{
				Toast.makeText(context, "SD карта не доступна", Toast.LENGTH_LONG).show();
				return "SD карта не доступна";
			}
			
			// Получаем путь к SD
			File sd_path = Environment.getExternalStorageDirectory();
			// добавляем свой каталог к пути
			sd_path = new File(sd_path.getAbsolutePath() + "/" + DIR_SD);
			// формируем объект File содержащий путь к файлу
			File sd_file = new File(sd_path, file_name);
			
			try
			{
				// Открываем поток для чтения
				BufferedReader br = new BufferedReader(new FileReader(sd_file));
				// читаем содержимоe
				while((result = br.readLine()) != null){}
				//Toast.makeText(context, result, Toast.LENGTH_SHORT).show();
				br.close();
				return result;
			}
			catch(FileNotFoundException e)
			{
				result = file_name + " Not found";
				e.printStackTrace();
			}
			catch(IOException e)
			{
				Toast.makeText(context, "IOException", Toast.LENGTH_SHORT).show();
				e.printStackTrace();
			}
			
			return result;
		}

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

Добавлено: 16 фев 2014, 11:18
_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: . Так вот собственно вопрос -как сделать что бы при удалении приложения удалялось все что оно создало в процессе своей работы