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]; //每次读取4K
int num = 0; //需要根据读取的字节大小写入文件
while((num = (input.read(buffer))) != -1){
output.write(buffer, 0, num);
}
output.flush(); //清空缓存
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
finally{
try{
output.close();
}
catch (Exception e) {
// TODO: handle exception
e.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 exception
e.printStackTrace();
}
finally{
try{
bufw.close();
}
catch (Exception e) {
// TODO: handle exception
e.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")); // 防止中文出现乱码 gb2312
while ((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-8
File resultFile = fileUitls.write2SDFromWrite(Path, FileName,
buffer);
if (resultFile == null) {
return -1;
}
} } catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
return -1;
} finally {
try {
if(buffer != null)
buffer.close();
} catch (Exception e) {
// TODO: handle exception
e.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 exception
e.printStackTrace();
return -1;
} finally {
try {
inputstream.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
return 0;
} /**
* 根据URL得到输入流
*
* @param urlstr
* @return
* @throws MalformedURLException
* @throws IOException
*/
private InputStream getInputStreamFromUrl(String urlstr)
throws MalformedURLException, IOException {
// TODO Auto-generated method stub
url = 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; @Override
protected 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 { @Override
public void onClick(View v) { // TODO Auto-generated method stub
HttpDownloader 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 { @Override
public void onClick(View v) {
// TODO Auto-generated method stub
HttpDownloader 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的端口号

下载后的两个文件如图

样例代码

点击打开链接

Android开发之下载Tomcat服务器的文件到模拟器的SD卡的更多相关文章

  1. Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)

    Android开发中经常会遇到多存储空间的问题,包括内置存储路径以及外置SD卡,而且有的时候会有多张外置SD卡,此时就需要获取不同的SD卡路径,然后根据需要来写入或者读出文件. 此处给出常用的SD卡工 ...

  2. 转: android之虚拟机访问tomcat服务器资源

    最近在研究Android虚拟机访问tomcat服务器资源,所以找了个时间写下这篇博客和大家分享一下心得. 其实Android虚拟机访问tomcat服务器非常的简单,只要不要弄错IP地址就可以访问tom ...

  3. 【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序

    最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享. PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架,是最强大的 GUI ...

  4. 老罗android开发视频教程 下载地址

    感觉老罗android开发视频教程讲得挺好挺全面的,适合新手学习.分享 老罗android开发视频教程 下载地址: 电驴:http://www.verycd.com/topics/2929580/ 老 ...

  5. Android模拟器使用SD卡

    在Android的应用开发中经常要用到与SD卡有关的调试,本文就是介绍关于在Android模拟器中SD卡的使用 一.      准备工作 在介绍之前首先做好准备工作,即配好android的应用开发环境 ...

  6. 【Android】14.0 第14章 内部存储与外部SD卡存储—本章示例主界面

    分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 Android使用的文件系统是基于Linux的文件系统,在Android应用程序中,开发人员既可以建立和访问程序自 ...

  7. Android与Asp.Net Web服务器的文件上传下载BUG汇总[更新]

    遇到的问题: 1.java.io.IOException: open failed: EINVAL (Invalid argument)异常,在模拟器中的sd卡创建文件夹和文件时报错 出错原因可能是: ...

  8. 【Android 应用开发】Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载

    19af543b068bdb7f27787c2bc69aba7f Additional Download (32-, 64-bit) Package r10 STL debug info androi ...

  9. JavaWeb开发之一《Tomcat服务器的部署、安装及应用》

    搬以前写的博客[2014-12-10 21:43] 这几天做了一个Java的程序,然后先把他搭载到Web上,于是学习了基于Tomcat服务器的web开发,这里回顾一下Tomcat服务器的搭建过程. 1 ...

随机推荐

  1. typedef和define

    typedef int INT; #define INTPTR1 (int*) typedef是用来声明类型别名的,在实际编写代码过程使用typedef往往是为了增加代码的可读性. #define是一 ...

  2. poll系统调用的内核态实现机制分析

    版权所有,转载请标明出处   All right reserved,Copyright by 徐行而至 浅唱而归 前面已经比较详尽的分析了系统调用引发的内核执行过程,本文将继续分析一下linux2.6 ...

  3. 一步一步重写 CodeIgniter 框架 (1) —— url 如何映射到具体的方法

    CodeIgniter 框架最显著的特征就是 MVC 模式,它的做法就是提取 url 中的'分段', 映射到某个类的某个方法,从而由该方法来输出最终显示的页面内容.那么我们第一课中就是实现一个这样的原 ...

  4. itextSharp 对pdf的每个页面添加footer/header

    static void SetAllHeaderFooter(string inputPath) { PdfReader reader=new PdfReader(inputPath); PdfSta ...

  5. FMXUI - UI.Dialog 示例

    在 FMXUI 开源库,增加了 UI.Dialog 单元.此单元实现了跨平台的基础对话框组件.使用时引用 UI.Dialog 即可.如果需要自定义对话框的样式, 可以添加一个 TDialogStyle ...

  6. 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox

    原文 操作PDF文档功能的相关开源项目探索——iTextSharp 和PDFBox 很久没自己写写心得日志与大家分享了,一方面是自己有点忙,一方面是自己有点懒,没有及时总结.因为实践是经验的来源,总结 ...

  7. linux系统挂掉问题的分析

    玩linux系统,经常遇到的一件事就是做了某个操作之后系统会突然挂掉,这要怎么办? 1. 首先我们要看log,看看是否会留下一些蛛丝马迹,比如PC/LR是否有留下来. PC是ARM的一个寄存器,即程序 ...

  8. 动态绑定Gridview带模板列

    公司要做一个可以支持4种数据库(<!--数据库类型 (DLL专用) (SQL SERVER) (ORACLE) (ACCESS)(POSTGRE SQL)-->)的并且字段随表字段变化的可 ...

  9. 算法-最长子序列和C/C++实现(三个复杂度)

    最长子序列和的问题非常easy: 就是一个数组,求出当中当中连续的某一段和,而这一段和是全部的连续段和的最大的值.求出这个值. 先说复杂度最高的:O(n3) 直接上代码,非常easy的: // // ...

  10. Microsoft Visual Studio International Pack 1.0 SR1--关于汉字转拼音

    Microsoft Visual Studio International Pack 1.0 SR1————微软的一个类库 地址:http://www.microsoft.com/zh-cn/down ...