您的位置:首页 > 移动开发 > Android开发

Android 文件下载保存读取

2017-09-15 11:34 369 查看
                对于Android的文件的下载,保存到本地,读取本地文件。

1.环境准备,需要被下载的文件url,或者自己搭建环境,有tomcat就行。运行tomcat,将需要被下载的文件放到上面。

     这里我是放在我自己的服务器上的一个TXT文档做为例子。

2.下载文件,下载下来是一个字符串,注意需要进行转码,否则会产生乱码。采用的是Android 原生的httpURLconnection 进行读取。返回文件的内容。注意网络权限。



/**
*@author chenzhu
*creat at 2017/9/15 10:42
*@param baseUrl 文件的网络地址
*@return  文件字符串
* @include  saveFile() 保存文件
*
**/
public String  getFileByUrl(String baseUrl) {
try {
URL url = new URL(baseUrl);
HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
urlConn.setDoInput(true);        //设置输入流采用字节流
urlConn.setDoOutput(true);        //设置输出流采用字节流
urlConn.setRequestMethod("POST");
urlConn.setUseCaches(false);    //设置缓存
urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
urlConn.setRequestProperty("Charset", "utf-8");
urlConn.connect();

DataOutputStream dos = new DataOutputStream(urlConn.getOutputStream());
dos.writeBytes("tqpadmac=" + URLEncoder.encode("B407F9D67C80", "utf-8"));
dos.writeBytes("tqpadver=" + URLEncoder.encode("1", "utf-8"));
dos.flush();
dos.close();

//这句:new InputStreamReader(urlConn.getInputStream(), "gbk")  设置编码
BufferedReader br = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "gbk"));
String line = "";
String result = "";
while (null != (line = br.readLine())) {
result += line;
}
Log.d("chenzhu","chenzhu--->get data byurl接到的数据: " + result);
br.close();
urlConn.disconnect();
return result;
} catch (Exception e1) {
e1.printStackTrace();
}
return "";
}


3 .如果需要将内容保存的话就采用入选方法,注意文件读写权限。

   将2中获取到的文件内容做为参数传递过来,就可使实现保存了,不过需要注意的是

 保存的路径没有选取默认内存路径,而是将其存到APP的下面,因为有些机子不支持在默认路径下存。

/**
*@author chenzhu
*creat at 2017/9/15 10:44
*@param  file  需要保存的文件内容
*@return
*
**/
private void saveFile(String file ) {
try{
ByteArrayInputStream inputStream = new ByteArrayInputStream(file.getBytes());
FileOutputStream outputStream = new FileOutputStream("/data/data/"+getPackageName()+"/files/FaultCodeList.txt");
Log.d("chenzhu","chenzhu--->save data"+Environment.getExternalStorageDirectory());
int len = -1;
while((len = inputStream.read())!=-1){
outputStream.write(len);
}
outputStream.flush();
outputStream.close();
}catch (Exception e){
e.printStackTrace();
Log.d("chenzhu","chenzhu--->save data"+e);
}
}


4.从本地将存入的文件读取出来。

private String readFile(String filename) {
String reads = "";
try {
File file = new File(filename);
FileInputStream    fis = new FileInputStream(file);

byte[] b = new byte[1024];
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while (fis.read(b) != -1) {
baos.write(b, 0, b.length);
}
fis.close();
baos.flush();
baos.close();
reads = baos.toString();
Log.d("chenzhu","chenzhu--->read file"+reads);

} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
Log.d("chenzhu","chenzhu--->read file FileNotFoundException"+e);
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.d("chenzhu","chenzhu--->read file IOException"+e);
}
return reads;
}


好了 以上三个方法基本能满足普通的文件操作了,欢迎交流和指教。需要注意的是一点要关闭和清空管道。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: