Задать вопрос
trollface
@trollface

Проблема при загрузке файла?

Возникла очень интересная проблема.


Имеем директорию (например mnt/sdcard/myapp/mydir).


В неё загружаем mp3 файл из интернета.

Файл успешно загружается в директорию и всё нормально.


Но когда размер этой папки (или количество файлов в ней — я ещё не понял) становится слишком большим (>800 мбайт) или соответственно, становится слишком много файлов — файлы начинают загружаться туда через раз, и то не все. Пересоздание этой папки (и удаление оттуда файлов) помогает.


Вот функция загрузки в сервисе:

Мой код (обращения к UI убрал)
private void downloadAudio(final Audio audio)

	{

		   	 final String audioDirPath=PathPackage.audioDirPath;
			 final  String audioName = audio.title;
			
			 final long aid = audio.aid;
			 

			 
			 File audioFile = new File(audioDirPath+ "/" + audio.title +"["+audio.aid+"]"+".mp3");

		       Log.i("DownloadManager", "Start download to: " + audioFile.getAbsolutePath());
					
			   byte[] buffer = new byte[1024];
		           URL url = null;
		       
		          int totalSize=0;
				  int loaded=0;
		      
					try {
						url = new URL(audio.url);
					} catch (MalformedURLException e1) {
						e1.printStackTrace();
						return;
					}
					
					
					URLConnection ucon = null;
					try {
						ucon = url.openConnection();
					    ucon.setReadTimeout(TIMEOUT_CONNECTION);
					    ucon.setConnectTimeout(TIMEOUT_SOCKET);
					} catch (IOException e1) {
						e1.printStackTrace();
						Toast.makeText(this, e1.getMessage(), Toast.LENGTH_LONG).show();
						return;
					}
			
		   
		       
		       InputStream is = null;
			   try {
				is = ucon.getInputStream();
			} catch (IOException e1) {
				e1.printStackTrace();
				Toast.makeText(getApplicationContext(), e1.getMessage(), Toast.LENGTH_LONG).show();
				return;
			}
					
					totalSize = ucon.getContentLength();
		       BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5);

		       FileOutputStream outStream = null;
			try {
				outStream = new FileOutputStream(audioFile);
			} catch (FileNotFoundException e1) {
				e1.printStackTrace();
			}
		       
		   
		   int read = 0;
		   		try {
						while ((read = inStream.read(buffer)) != -1)
						{
							    outStream.write(buffer,0,read); 
						} catch (Exception e)
						{
							e.printStackTrace();
						}
		   		
		   		
					try {
						outStream.flush();
						outStream.close();
						inStream.close();
					} catch (Exception e){
					e.printStackTrace();	
					}
		   
		
					sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, 
					        Uri.parse("file://" + Environment.getExternalStorageDirectory()))); 
							
	}





Очень надеюсь на вашу помощь)
  • Вопрос задан
  • 3713 просмотров
Подписаться 2 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 2
dimmi
@dimmi
Может стоит раскидывать файлы по сабдиректориям ограничив их количество в каждой?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы