Android开发之下载Tomcat服务器的文件到模拟器的SD卡

来源:互联网 发布:微博淘宝客封号 编辑:程序博客网 时间:2024/06/05 16:43

    Tomcat服务器可以到Apache的官网去下载http://tomcat.apache.org/,如何配置和使用百度下也有很多介绍,只要把Java的SDK配下java_home环境变量就行了,因为Tomcat也是用Java程序写的所以需要依赖Java的库。如果配置成功在IE上输入:http://localhost:8080/回车就会出现Tomcat的主页


对SD卡进行操作需要新建一个工具类可以写入字节也可以写入字符  FileUitls.java

package com.example.utils;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import android.os.Environment;/** * 文件管理类    在以后的开发中也可以使用这个工具类,提高代码的利用性 * 只要是对SD卡的操作 * 1、获取SD卡路径   getSDPATH * 2、在SD卡上根据传入的目录名创建目录  createSDDir * 3、在创建上目录后可以在该目录上创建文件    createSDFile * 4、检测文件是否存在  isFileExist * 5、将一个InputStream写入到SD卡中   write2SDFromInput * 6、将一个字符流写入到SD卡 write2SDFromWrite * 注:如果要写入SD卡,只要调用write2SDFromInput函数即可 * @author Administrator * */public class FileUitls {private static String SDPATH;public FileUitls(){//得到当前设备外部存储设备的目录SDPATH = Environment.getExternalStorageDirectory() + File.separator;}/** * 获取当前SD卡的根目录 * @return */public String getSDPATH(){return SDPATH;}/** * SD卡上创建目录 */public File createSDDir(String dirName){File dir = new File(SDPATH + dirName);System.out.println("createSDDir " + SDPATH + dirName);dir.mkdir();return dir;}/** * SD卡上创建文件 */public File createSDFile(String fileName)throws IOException{File file = new File(SDPATH + fileName);System.out.println("createSDFile " + SDPATH + fileName);file.createNewFile();return file;}/** * 判断SD卡上的文件是否存在 */public boolean isFileExist(String fileName){File file = new File(SDPATH + fileName);return file.exists();}/** * 将一个InputStream字节流写入到SD卡中 */public File write2SDFromInput(String Path, String FileName, InputStream input){File file = null;OutputStream output = null;   //创建一个写入字节流对象try{createSDDir(Path);    //根据传入的路径创建目录file = createSDFile(Path + FileName); //根据传入的文件名创建output = new FileOutputStream(file);byte buffer[] = new byte[4 * 1024];   //每次读取4Kint num = 0;      //需要根据读取的字节大小写入文件while((num = (input.read(buffer))) != -1){output.write(buffer, 0, num);}output.flush();  //清空缓存}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try{output.close();}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}return file;}/** * 把传入的字符流写入到SD卡中 * @param Path * @param FileName * @param input * @return */public File write2SDFromWrite(String Path, String FileName, BufferedReader input){File file = null;FileWriter output = null;   //创建一个写入字符流对象BufferedWriter bufw = null;try{createSDDir(Path);    //根据传入的路径创建目录file = createSDFile(Path + FileName); //根据传入的文件名创建output = new FileWriter(file);bufw = new BufferedWriter(output);String line = null;while((line = (input.readLine())) != null){System.out.println("line = " + line);bufw.write(line);bufw.newLine();}bufw.flush();  //清空缓存}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try{bufw.close();}catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}return file;}}

还需要创建一个下载工具类  HttpDownloader.java

对于下载类,要注意的就是下载文件变成乱码问题,如果有中文最好指定gb3212编码或UTF-8

package com.example.utils;import java.io.BufferedReader;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.MalformedURLException;import java.net.URL;public class HttpDownloader {private URL url = null;/** * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容  * 1.创建一个URL对象 * 2.通过URL对象,创建一个HttpURLConnection对象  * 3.得到InputStram  * 4.从InputStream当中读取数据 *  * @param urlStr * @return */public String download(String urlstr) {StringBuffer sb = new StringBuffer();String line = null;BufferedReader buffer = null;try {// 创建一个URL对象url = new URL(urlstr);// 创建一个Http连接HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();// 使用IO流读取数据buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream(), "gb2312")); // 防止中文出现乱码  gb2312while ((line = buffer.readLine()) != null) {sb.append(line);}} catch (Exception e) {e.printStackTrace();} finally {try {buffer.close();} catch (Exception e) {e.printStackTrace();}}return sb.toString();}/** * 可以下载字节流文件到SD卡中 *  * @param urlstr  要下载文件的URI地址 * @param Path  在SD卡上文件夹的路径 * @param FileName  在SD卡上文件的名称 * @return 该函数返回整型:-1代表下载失败,0代表下载成功,1代表文件已经存在 */public int download(String urlstr, String Path, String FileName) {InputStream inputstream = null;BufferedReader buffer = null;try {FileUitls fileUitls = new FileUitls();System.out.println(Path + FileName);if (fileUitls.isFileExist(Path + FileName)) {return 1;} else {// 获取URI中的字节流inputstream = getInputStreamFromUrl(urlstr);// 把字节流转换成字符流buffer = new BufferedReader(new InputStreamReader(inputstream,"gb2312")); // 防止中文出现乱码   UTF-8File resultFile = fileUitls.write2SDFromWrite(Path, FileName,buffer);if (resultFile == null) {return -1;}}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();return -1;} finally {try {if(buffer != null)buffer.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}return 0;}/** * 可以下载字符流和字节流文件到SD卡中 *  * @param urlstr * @param Path * @param FileName * @return 该函数返回整型:-1代表下载失败,0代表下载成功,1代表文件已经存在 */public int downFile(String urlstr, String Path, String FileName) {InputStream inputstream = null;try {FileUitls fileUitls = new FileUitls();if (fileUitls.isFileExist(Path + FileName)) {return 1;} else {inputstream = getInputStreamFromUrl(urlstr);File resultFile = fileUitls.write2SDFromInput(Path, FileName,inputstream);if (resultFile == null) {return -1;}}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();return -1;} finally {try {inputstream.close();} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}return 0;}/** * 根据URL得到输入流 *  * @param urlstr * @return * @throws MalformedURLException * @throws IOException */private InputStream getInputStreamFromUrl(String urlstr)throws MalformedURLException, IOException {// TODO Auto-generated method stuburl = new URL(urlstr);HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();InputStream inputStream = urlConn.getInputStream();return inputStream;}}

在主界面上有添加两个按钮,分别下载歌词和歌曲

package com.example.download;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import com.example.utils.HttpDownloader;public class Download extends Activity {private Button downloadtxt;private Button downloadmp3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);downloadtxt = (Button) findViewById(R.id.download_txt);downloadtxt.setOnClickListener(new DownLoadTxt());downloadmp3 = (Button) findViewById(R.id.download_mp3);downloadmp3.setOnClickListener(new DownLoadMp3());}/** * 下载文本文件,主要是字符流 * @author Administrator * */class DownLoadTxt implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubHttpDownloader httpDownloader = new HttpDownloader();int result = httpDownloader.download("http://192.168.0.152:8080/mp3/a1.lrc", "mp3Test/abc/","a1.lrc");System.out.println("down load txt result = " + result);// String lrc =// httpDownloader.download("http://192.168.0.152:8080/mp3/a1.lrc");// System.out.println("down load txt = " + lrc);}}/** * 下载字节流文件,也可以下载字符流文件 * @author Administrator * */class DownLoadMp3 implements OnClickListener {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubHttpDownloader httpDownloader = new HttpDownloader();int result = httpDownloader.downFile("http://192.168.0.152:8080/mp3/a1.mp3", "mp3Test/","a1.mp3");System.out.println("downfile load txt result = " + result);}}}

其中192.168.0.152是本地IP地址8080是Tomcat的端口号

下载后的两个文件如图



样例代码

点击打开链接