下载网络服务器上的文件 或者 图片 两者相似
package com.example.tssh.mydownloadfile;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity {
private String TAG = "MainActivity: ";
private String urlLoadPath = "http://dl.kkdownload.com/kz2sem2/KuaiZip_Setup_sem2_604.exe"; //下载的文件 网络地址
private String savaDirPath = "testLoad"; //保存的地址
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//先去检查有没有相应权限
CheckThread checkThread = new CheckThread();
checkThread.start();
try {
checkThread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
new Thread(new Runnable() {
@Override
public void run() {
DownLoadFileFormUrl(urlLoadPath,savaDirPath); //调用下载函数
}
}).start();
}
public boolean DownLoadFileFormUrl(String urlLoadPath, String savaDirPath){
InputStream inputStream = null;
FileOutputStream fileOutputStream = null;
HttpURLConnection httpURLConnection = null;
if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
Log.i(TAG," 未安装 SD 卡");
return false;
}
File pathSd = Environment.getExternalStorageDirectory(); //获取 SD 卡路径
File fileRealDirectoty = new File(pathSd.getAbsolutePath() + File.separator + savaDirPath);
Log.i(TAG,"文件保存的真正目录: " + fileRealDirectoty);
if (!fileRealDirectoty.exists()) { //如果目录 不存在 ,就创建
Log.i(TAG,"创建 存储文件夹");
fileRealDirectoty.mkdirs();
}
//获取要下载的文件名称,在这里可以更改下载的文件名
String fileName = urlLoadPath.substring(urlLoadPath.lastIndexOf("/") + 1);
//String fileName = "test.zip";
//创建 这个文件名 命名的 file 对象
File file = new File(fileRealDirectoty,fileName);
Log.i(TAG,"file: " + file);
if (!file.exists()) { //倘若没有这个文件
try {
Log.i(TAG,"创建文件");
file.createNewFile(); //创建这个文件
} catch (IOException e) {
e.printStackTrace();
}
}
try {
URL url = new URL(urlLoadPath);
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.connect();
int code = httpURLConnection.getResponseCode();
if (code == 200 ) {
//网络连接成功
} else {
//网络返回异常
}
//根据响应获取文件大小
int fileSize = httpURLConnection.getContentLength();
Log.i(TAG,"文件大小: " + fileSize);
inputStream = httpURLConnection.getInputStream();
fileOutputStream = new FileOutputStream(file);
byte[] b = new byte[1024];
int tem = 0;
while ((tem = inputStream.read(b))!= -1) {
fileOutputStream.write(b,0,tem);
}
} catch (MalformedURLException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (fileOutputStream != null) {
fileOutputStream.close();
}
if (httpURLConnection != null) {
httpURLConnection.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Log.i(TAG,"文件下载 成功");
return true;
}
//sd 卡权限申请
private void checkPermission() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
if(requestCode == 100){
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "");
}
}
}
public class CheckThread extends Thread{
public void run() {
checkPermission();
}
}
}
文件参考:
《Android 典型技术模块开发详解》
本人郑重声明,本博客所编文章、图片版权归权利人持有,本博只做学习交流分享所用,不做任何商业用途。访问者可將本博提供的內容或服务用于个人学习、研究或欣赏,不得用于商业使用。同時,访问者应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人的合法权利;如果用于商业用途,须征得相关权利人的书面授权。若文章、图片的原作者不愿意在此展示內容,请及时通知在下,將及时予以刪除。