2012-12-14 3 views
1
else if (v.getId() == R.id.update) { 

     StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 

     StrictMode.setThreadPolicy(policy); 

     try { 
      URL url = new URL("http://darkliteempire.gaming.multiplay.co.uk/testdownload.txt"); 

      //create the new connection 

      HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); 

      //set up some things on the connection 

      urlConnection.setRequestMethod("GET"); 

      urlConnection.setDoOutput(true); 

      //and connect! 

      urlConnection.connect(); 

      //set the path where we want to save the file 

      //in this case, going to save it on the root directory of the 

      //sd card. 

      File SDCardRoot = new File("/sdcard/"+"download/"); 

      //create a new file, specifying the path, and the filename 

      //which we want to save the file as. 

      File file = new File(SDCardRoot,"test.txt"); 

      //this will be used to write the downloaded data into the file we created 

      FileOutputStream fileOutput = new FileOutputStream(file); 

      //this will be used in reading the data from the internet 

      InputStream inputStream = urlConnection.getInputStream(); 

      //this is the total size of the file 

      int totalSize = urlConnection.getContentLength(); 

      //variable to store total downloaded bytes 

      int downloadedSize = 0; 

      //create a buffer... 

      byte[] buffer = new byte[1024]; 

      int bufferLength = 0; //used to store a temporary size of the buffer 

      //now, read through the input buffer and write the contents to the file 

      while ((bufferLength = inputStream.read(buffer)) > 0) 

      { 

      //add the data in the buffer to the file in the file output stream (the file on the sd card 

      fileOutput.write(buffer, 0, bufferLength); 

      //add up the size so we know how much is downloaded 

      downloadedSize += bufferLength; 

      int progress=(int)(downloadedSize*100/totalSize); 

      //this is where you would do something to report the prgress, like this maybe 

      //updateProgress(downloadedSize, totalSize); 

      } 

      //close the output stream when done 

      fileOutput.close(); 
     } catch (MalformedURLException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (ProtocolException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (FileNotFoundException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (IOException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } 

이 코드는 계속 FileNotFoundException과 함께 나오지 만 파일을 보니 URL을 따라 가면 볼 수 있습니다.안드로이드가 FileNotFoundException을 받고있는 파일을 다운로드 중입니다.

특정 방식으로 호스팅해야합니까? 또는 그것을

편집을 얻는 방식 임에 뭔가 문제가있다 : 이것은 로그 캣 메시지

12-14 22:29:19.890: W/System.err(24557): java.io.FileNotFoundException:  http://darkliteempire.gaming.multiplay.co.uk/testdownload.txt 
12-14 22:29:19.890: W/System.err(24557): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 
12-14 22:29:19.890: W/System.err(24557): at com.MasterZangetsu.kentrocksoc.MainActivity.onClick(MainActivity.java:99) 
12-14 22:29:19.890: W/System.err(24557): at android.view.View.performClick(View.java:3591) 
12-14 22:29:19.890: W/System.err(24557): at android.view.View$PerformClick.run(View.java:14263) 
12-14 22:29:19.895: W/System.err(24557): at android.os.Handler.handleCallback(Handler.java:605) 
12-14 22:29:19.895: W/System.err(24557): at android.os.Handler.dispatchMessage(Handler.java:92) 
12-14 22:29:19.895: W/System.err(24557): at android.os.Looper.loop(Looper.java:137) 
12-14 22:29:19.895: W/System.err(24557): at android.app.ActivityThread.main(ActivityThread.java:4507) 
12-14 22:29:19.895: W/System.err(24557): at java.lang.reflect.Method.invokeNative(Native Method) 
12-14 22:29:19.895: W/System.err(24557): at java.lang.reflect.Method.invoke(Method.java:511) 
12-14 22:29:19.895: W/System.err(24557): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790) 
12-14 22:29:19.895: W/System.err(24557): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557) 
12-14 22:29:19.895: W/System.err(24557): at dalvik.system.NativeStart.main(Native Method) 
12-14 22:29:20.170: W/WifiStateTracker(2010): getNetworkInfo : NetworkInfo: type: WIFI[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: false 
+1

대개 대상 디렉토리에 문제가 있습니다. 파일 시스템에'/ sdcard/download' 경로가 있는지 확인하십시오. – hoaz

+0

URL이 맞습니까? UrlConnection이 FileNotFound 예외를 throw하지 않는 것처럼 보입니다. 아마도 sdcard에서 파일에 액세스하는 방식일까요? 예외가 발생한 부분을 게시 할 수 있습니까? – SirRichie

+0

모든 logcat 오류를 게시하십시오. – Sam

답변

8

코멘트 코드 라인의 아래 부분입니다. urlConnection.setDoOutput (true);

+0

의견을 보내 주시는 이유를 기입하십시오. –

+0

정말 고마워! – Bhupinder

+0

저에게 감사드립니다. –

관련 문제