1. 添加相关的权限,设备API大于6.0时需要主动申请权限
//设备API大于6.0时,主动申请权限
private void requestPermission(Activity context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 0);
}
}
}
2.连接服务器获取文件
/**
* 从服务器下载文件
* @param path 下载文件的地址
* @param FileName 保存后的文件名字
*/
public static void downLoad(final String path, final String FileName) {
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url = new URL(path);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setReadTimeout(5000);
con.setConnectTimeout(5000);
con.setRequestProperty("Charset", "UTF-8");
con.setRequestMethod("GET");
if (con.getResponseCode() == 200) {
InputStream is = con.getInputStream();//获取输入流
FileOutputStream fileOutputStream = null;//文件输出流
if (is != null) {
fileOutputStream = new FileOutputStream(FileLoadUtils.createFile(FileName));//指定文件保存路径,代码看下一步
byte[] buf = new byte[1024];
int ch;
while ((ch = is.read(buf)) != -1) {
fileOutputStream.write(buf, 0, ch);//将获取到的流写入文件中
}
}
if (fileOutputStream != null) {
fileOutputStream.flush();
fileOutputStream.close();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext,"下载成功",Toast.LENGTH_SHORT).show();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mContext,"下载失败",Toast.LENGTH_SHORT).show();
}
});
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
3.工具类
public class FileLoadUtils {
public FileLoadUtils() {
}
/**
* 创建一个文件
* @param FileName 文件名
* @return
*/
public static File createFile(String FileName) {
String path = Environment.getExternalStorageDirectory().toString() + "/complaint";
File file = new File(path);
/**
*如果文件夹不存在就创建
*/
if (!file.exists()) {
file.mkdirs();
}
return new File(path, FileName);
}
}
4. 调用
long current = System.currentTimeMillis();
switch (view.getId()) {
case R.id.btn_load:
String fileName = current+"prov.rar";
downLoad(provPath,fileName);
break;
case R.id.btn_document_load:
String dataFileName = current+"data.rar";
downLoad(dataPath,dataFileName);
break;
}