哪些年遇到过的Andriod问题(11)如何下载文件到SD卡中?权限集?问题在下载网络中1K的文件时要假死?(Mars的代码有问题吗)
2012-09-11 17:26
901 查看
a) 权限问题
<!--照相:Camera: -->
<uses-permission
android:name="android.permission.CAMERA"/>
<!-- 注意必须在application上面-->
<uses-permission
android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--OnReceiver服务: -->
<receiver
android:name=”.SoundActivity”android:process=”:remote”/
<!-- 添加WiFi以及访问网络的权限:-->
<uses-permission
android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission
android:name="android.permission.INTERNET"
></uses-permission>
<uses-permission
android:name="android.permission.WAKE_LOCK"
></uses-permission>
<!-- 操作外部存储设备文件: -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 录音时需要的权限: -->
<uses-permission
android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 录制视频时需要的权限: -->
<uses-permission
android:name="android.permission.CAMERA"></uses-permission>
<uses-permission
android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 发送短信: -->
<uses-permission
android:name="android.permission.SEND_SMS"></uses-permission>
<!-- 收短信: -->
<uses-permission
android:name="android.permission.RECEIVE_SMS"/>
<!-- 收彩信: -->
<uses-permission
android:name="android.permission.READ_SMS"/>
<!-- GPS: -->
<!-- 上網連線 -->
<uses-permission
android:name="android.permission.INTERNET"></uses-permission>
<!-- GPS定位 -->
<uses-permission
android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- AGPS定位 -->
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 另外要注意的是读写sd卡文件必须首先要在Mainifest.xml文件中配置权限:
-->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
b) 如何下载文件
这几天一直在看Mars的视频,他的代码里面分了2个类来实现,看着不方便就合到了一起来看。
private URL
url = null;
String SDPATH = Environment.getExternalStorageDirectory() +
"/";
/**
* 该函数返回整形-1:代表下载文件出错 0:代表下载文件成功
1:代表文件已经存在
*
* @urlStr URL文件的网络地址
* @path文件存储路径
* @fileName文件名
* @isOverride是否覆盖
*/
public
int downFile(String urlStr, String path, String fileName,
boolean isOverride) {
InputStream inputStream = null;
String sFilePath = path + fileName;
System.out.println("urlStr=" + urlStr);
System.out.println("sFilePath=" + sFilePath);
try {
//文件夹是否存在
if (isFileExist(sFilePath)) {
if (isOverride) {
// 覆盖文件,在网上查了一下,好像比较复杂,要先删除在创建
}
return 1;
} else {
inputStream = getInputStreamFromUrl(urlStr);
File resultFile = write2SDFromInput(path, fileName,inputStream);
if (resultFile ==
null) {
return -1;
}
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
/**
* 根据URL得到输入流
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
public InputStream
getInputStreamFromUrl(String urlStr)
throws MalformedURLException, IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection)
url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
c) 如何存储文件
以下是以downFile文件调用方法的顺序记录
/**
* 判断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 {
creatSDDir(path); //创建目录
file = creatSDFile(path + fileName); //创建文件
output = new FileOutputStream(file);
int iLength = (int) file.length();
System.out.println(fileName +
" >> " + iLength);//打印文件与长度
byte buffer[] =
new byte[iLength];
while ((input.read(buffer)) != -1) {
output.write(buffer);
}
output.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}
/**
* 在SD卡上创建目录
* @param dirName
*/
public File creatSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
dir.mkdir();
return dir;
}
/**
* 在SD卡上创建文件
* @throws IOException
*/
public File creatSDFile(String fileName)
throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
<!--照相:Camera: -->
<uses-permission
android:name="android.permission.CAMERA"/>
<!-- 注意必须在application上面-->
<uses-permission
android:name="android.permission.UPDATE_DEVICE_STATS"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--OnReceiver服务: -->
<receiver
android:name=”.SoundActivity”android:process=”:remote”/
<!-- 添加WiFi以及访问网络的权限:-->
<uses-permission
android:name="android.permission.CHANGE_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission
android:name="android.permission.INTERNET"
></uses-permission>
<uses-permission
android:name="android.permission.WAKE_LOCK"
></uses-permission>
<!-- 操作外部存储设备文件: -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 录音时需要的权限: -->
<uses-permission
android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 录制视频时需要的权限: -->
<uses-permission
android:name="android.permission.CAMERA"></uses-permission>
<uses-permission
android:name="android.permission.RECORD_AUDIO"></uses-permission>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 发送短信: -->
<uses-permission
android:name="android.permission.SEND_SMS"></uses-permission>
<!-- 收短信: -->
<uses-permission
android:name="android.permission.RECEIVE_SMS"/>
<!-- 收彩信: -->
<uses-permission
android:name="android.permission.READ_SMS"/>
<!-- GPS: -->
<!-- 上網連線 -->
<uses-permission
android:name="android.permission.INTERNET"></uses-permission>
<!-- GPS定位 -->
<uses-permission
android:name="android.permission.ACCESS_MOCK_LOCATION"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- AGPS定位 -->
<uses-permission
android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 另外要注意的是读写sd卡文件必须首先要在Mainifest.xml文件中配置权限:
-->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
b) 如何下载文件
这几天一直在看Mars的视频,他的代码里面分了2个类来实现,看着不方便就合到了一起来看。
private URL
url = null;
String SDPATH = Environment.getExternalStorageDirectory() +
"/";
/**
* 该函数返回整形-1:代表下载文件出错 0:代表下载文件成功
1:代表文件已经存在
*
* @urlStr URL文件的网络地址
* @path文件存储路径
* @fileName文件名
* @isOverride是否覆盖
*/
public
int downFile(String urlStr, String path, String fileName,
boolean isOverride) {
InputStream inputStream = null;
String sFilePath = path + fileName;
System.out.println("urlStr=" + urlStr);
System.out.println("sFilePath=" + sFilePath);
try {
//文件夹是否存在
if (isFileExist(sFilePath)) {
if (isOverride) {
// 覆盖文件,在网上查了一下,好像比较复杂,要先删除在创建
}
return 1;
} else {
inputStream = getInputStreamFromUrl(urlStr);
File resultFile = write2SDFromInput(path, fileName,inputStream);
if (resultFile ==
null) {
return -1;
}
}
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
try {
inputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return 0;
}
/**
* 根据URL得到输入流
* @param urlStr
* @return
* @throws MalformedURLException
* @throws IOException
*/
public InputStream
getInputStreamFromUrl(String urlStr)
throws MalformedURLException, IOException {
url = new URL(urlStr);
HttpURLConnection urlConn = (HttpURLConnection)
url.openConnection();
InputStream inputStream = urlConn.getInputStream();
return inputStream;
}
c) 如何存储文件
以下是以downFile文件调用方法的顺序记录
/**
* 判断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 {
creatSDDir(path); //创建目录
file = creatSDFile(path + fileName); //创建文件
output = new FileOutputStream(file);
int iLength = (int) file.length();
System.out.println(fileName +
" >> " + iLength);//打印文件与长度
byte buffer[] =
new byte[iLength];
while ((input.read(buffer)) != -1) {
output.write(buffer);
}
output.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return file;
}
/**
* 在SD卡上创建目录
* @param dirName
*/
public File creatSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
dir.mkdir();
return dir;
}
/**
* 在SD卡上创建文件
* @throws IOException
*/
public File creatSDFile(String fileName)
throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
相关文章推荐
- 哪些年遇到过的Andriod问题(13)Mars的下载文件代码不知道是什么问题,在网上去新COPY了一个就可以下载了。
- 哪些年遇到过的Andriod问题(15)注册广播服务,如果你看过MARS老师的视频,还是不算了吧,这是纯COPY的
- 如何使用jxl 和 primface 下载excel文件 ,希望能帮助遇到同样问题的博主
- 如何解决ASP.NET下载时的中文文件名乱码,与TXT文件中存在代码两个问题
- 哪些年遇到过的Andriod问题(8)Handler使用 mars.barhandler中的错误(测试) 线程中停止线程?
- Android如何保存文件到sd卡,及期间遇到的各种问题
- Mars-Android学习——网络文件下载和写入SD卡
- 哪些年遇到过的Andriod问题(十)如何让自定义的方法/类在外部 (别的命名空间) 调用时,鼠标移上去会有提示?
- Mars-Android学习——网络文件下载和写入SD卡
- 哪些年遇到过的Andriod问题(16)Eclipse如何调试
- spark:学习过程中遇到的一些问题及解决方法(如何将本地文件发布到HDFS)--11
- 开发文件上传下载所遇到的问题
- .net操作doc的代码(原样式导入)(导出:解决了迅雷下载.aspx文件的问题)
- TensorFlow实现估值网络(Q-learning)代码遇到的问题
- JSP 文件 下载 代码 (不使用 jsp smart upload 组件) 解决中文名 问题
- 遇到问题----struts2文件下载出现Can not find a java.io.InputStream with the name的错误
- 当你在Mac下载东西的时候,有时候因为网络或者其他问题中断了,双击重新下载会提示你“您所请求的资源没有权限”?
- ASP.NET 2.0 HttpHandler实现对某种文件类型权限保护(示例代码下载)
- 关于 文件下载--------代码没有报错,又不弹出下载框,执行下载无反应的问题
- TCP网络通讯如何解决分包粘包问题(有模拟代码)