对于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; }
好了 以上三个方法基本能满足普通的文件操作了,欢迎交流和指教。需要注意的是一点要关闭和清空管道。