Android菜鸟日记11 下载

http://ask.lurencun.com
海大知道


下载
1. 作用:通过HTTP从互联网下载内容
2. 重点:
1.直接下载内容不保存到Sdcard时 通过url.opneConnection获得连接
2.需要保存成文件时 先判断是否有文件,无则先创建文件夹, 在创建文件。
使用:
不保存到file的
1.通过url获得连接 并强转成HttpURLConnection对象
URL url=new URL(urlstr);
HttpURLConnection hc=(HttpURLConnection)url.openConnection();
2.通过HttpURLConnection对象获取inputStream对象并一步步的装饰成BufferedReader对象。
br=new BufferedReader(new InputStreamReader(hc.getInputStream()));
3.从BufferedReader通过readline()读数据
while((line=br.readLine())!=null){
sb.append(line); //sb是一个StringBuffer对象
}
//bufferReader .readLine() 输出为下一行数据内容且把游标指向下一行 默认游标是在第一行之上 固,每次调用readLine()必须有对象接受此方法返回值(返回值为执行前游标所指的下一行数据)

//Returns the next line of text available from this reader
4.最后把stringbutter 对象toString()生成string对象输出。

保存成file文件的
注意:保存成file的类 应该独立写 只需传入 url,保存的文件名,保存的路径即可。
1.构造file的类 传入当前SD的路径 通过Environment.getExternalStorageDirectory()获得
因为不是所有手机的SD路径都一样 所以这样写可以较好的匹配各种型号的手机
String SDPATH=Environment.getExternalStorageDirectory()

2.判断是否存在当前文件。
public boolean isisFileExist(String path)
{
File file=new File(sd+path);
return file.exists();
}
3.如不存在则生成文件夹 再生成文件
public void creatDirPath(String path)
{
File dir=new File(sd+path);
dir.mkdir();
}
public File creatfile(String namepath) throws IOException
{
File file=new File(sd+namepath);
file.createNewFile();
return file;
}
4.把通过步骤3创造出的FILE对象传入到new FileOutputStram(FILE对象)。 得到一个向File文件输出的FileOutputStram对象。
file=creatfile(dirpath+namepath);
out=new FileOutputStream(file);
5.创建缓冲区
byte buffer [] = new byte[4 * 1024];//缓冲区大小为4K
6.读传入的inputStream流 并写入FileOutputStream
while(is.read(buffer)!=-1){//每次读4K的数据 写入buffer
out.write(buffer);//每次从buffer 取出4k数据
}
7.刷新缓冲区 关闭输出流
刷新缓冲
out.flush();
关闭输出流
finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


代码
DownloadActivity
package cfuture.poolo;

import java.io.IOException;

import android.app.Activity;

import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import cfuture.tool.*;

public class DownloadActivity extends Activity {

private Button txtbn=null;
private Button filebn=null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txtbn=(Button)this.findViewById(R.id.txtbutton);
filebn=(Button)this.findViewById(R.id.filebutton);
System.out.println("1111");
txtbn.setOnClickListener(new txtbn());
filebn.setOnClickListener(new filebn());

}
class txtbn implements OnClickListener
{


public void onClick(View arg0) {
download d=new download();
String temp=d.downloadTxt("http://192.168.1.101:8080/temp/1.txt");
System.out.println(temp);

}



}
class filebn implements OnClickListener
{


public void onClick(View arg0) {
download d=new download();
try {
System.out.println("22222222222");
d.url2file("http://192.168.1.101:8080/temp/1.wav","muisc/","3.wav");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}



}
}

Download.java
package cfuture.tool;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.net.ssl.HttpsURLConnection;


public class download {

public String downloadTxt(String urlstr)
{
String line=null;
StringBuffer sb=new StringBuffer();
BufferedReader br=null;
try {
URL url=new URL(urlstr);
HttpURLConnection hc=(HttpURLConnection)url.openConnection();
br=new BufferedReader(new InputStreamReader(hc.getInputStream()));
while((line=br.readLine())!=null){
sb.append(line);
}
//br.readLine() 输出为下一行数据内容且把游标指向下一行 默认游标是在第一行之上
//Returns the next line of text available from this reader


} catch (IOException e) {

e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

return sb.toString();
}

public void url2file(String urlstr,String path,String filename) throws IOException{
FileSD fd=new FileSD();
URL url= new URL(urlstr);
HttpURLConnection ht=(HttpURLConnection)url.openConnection();
int x=fd.write2file(ht.getInputStream(), path, filename);
System.out.println("================="+x);
}
}

FileSD.java
package cfuture.tool;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.os.Environment;

public class FileSD {

String sd=null;
public String getSd()
{

return this.getSd();
}
public FileSD()
{
sd=Environment.getExternalStorageDirectory()+"/";
}
//创建路径
public void creatDirPath(String path)
{
File dir=new File(sd+path);
dir.mkdir();
}
public File creatfile(String namepath) throws IOException
{
File file=new File(sd+namepath);
file.createNewFile();
return file;
}
public boolean isisFileExist(String path)
{
File file=new File(sd+path);
return file.exists();
}
public int write2file(InputStream is,String dirpath,String namepath)
{
File file=null;
FileOutputStream out=null;
if(isisFileExist(dirpath+namepath)){
return 0;
}else{
creatDirPath(dirpath);
try {
file=creatfile(dirpath+namepath);
out=new FileOutputStream(file);
int x=0;
byte buffer [] = new byte[4 * 1024];//缓冲区大小为4K
while(is.read(buffer)!=-1){//每次读4K的数据 写入buffer

out.write(buffer);//每次从buffer 取出4k数据
}
out.flush();
} catch (IOException e) {

e.printStackTrace();
return -1;
}finally{
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return 1;
}
}
}


[img]http://dl.iteye.com/upload/attachment/538321/891df802-77b9-3269-afbd-7ae1d81a72fe.gif[/img]

2011-8-14
poolo
智能家居系统设计:基于MATLAB的智能家居系统设计和仿真,包括智能家居控制、家庭能源管理和家庭安全监控 基于 MATLAB 的智能家居系统设计方法可以有效地解决各类智能家居问题。 阅读详情

相关推荐

《矩阵论》学习笔记(四):4.2 矩阵的QR分解

《矩阵论》学习笔记(四):4.2 矩阵的QR分解 文章目录《矩阵论》学习笔记(四):4.2 矩阵的QR分解一. Givens矩阵与Givens变换1.1. 概念与理解1.2. Givens矩阵求解方法二. Householder矩阵与Householder变换2.1. 概念与理解2.2. Householder矩阵求解方法2.3. Givens变换与Householder变换的关系三. 矩阵的QR...

shine的博客 3676

android菜鸟日记

2011-11-29 11月的倒数第二天和最后一天的交际,从现在开始,努力吧! 不知道我会学多久的android,只要我还在学,我就会写,希望对想学习android的童鞋能有点小帮助。我也是初学者,大家相互学习吧,要是我有说得不对的欢迎指正,也欢迎大牛来指导啊 今天首先来说说android的开发环境。我是在XP下开发的,用的是eclipse。要用eclipse开发android,首先要准备的

smile1106的专栏 580

STM32H743实战(三)-- 时钟系统配置

本文详细讲解了STM32H743时钟系统的配置方法,重点解析了为何选择400MHz而非理论极限480MHz作为稳定运行的主频。通过STM32CubeIDE环境,手把手指导如何从外部晶振配置、电源电压设置到PLL锁相环参数调整,最终实现稳定可靠的400MHz系统时钟,并提供了代码验证与常见问题排查指南。

weixin_29164185的博客 368

React Native Android配置部署踩坑日记

万事开头难 作为一只进入ECMAScript世界不久的菜鸟,已经被React Native的名气惊到了,开源一周数万星勾起了我浓烈的兴趣。新年新气象,来个HellWorld压压惊吧^_^(故意少打个'o') 具体的详细教程这里都有,我就说说这里没找到的几个坑,由于大部分资料还是0.1.4版本的react-native,笔者用最新的0.1.7和现有的很多是不一样的。 http://r...

Devin0924的博客 232

从零到一:手把手教你用Python+LangChain搭建企业级RAG知识库(附避坑指南)

本文为开发者提供了一份详尽的实战指南,手把手教你使用Python和LangChain框架从零构建企业级RAG知识库。内容涵盖环境搭建、文档处理、向量化检索、提示工程及生产部署等核心环节,并重点分享了文档分割、检索优化等关键避坑经验,旨在帮助读者打造稳定、高效且易于维护的智能知识中枢。

weixin_29058331的博客 398

Postman调试海康ISAPI接口全记录:从鉴权失败到成功修改设备名的踩坑指南

本文详细记录了使用Postman调试海康ISAPI接口的全过程,从鉴权失败到成功修改设备名的实战经验。涵盖Digest认证机制、XML请求体构造、常见错误排查及代码实现过渡,帮助开发者高效解决海康设备集成中的各种问题。

weixin_42620913的博客 660

RUST 学习日记 第1课 ——Hello World

<h3 id="rust--学习日记-第1课-hello-world">RUST 学习日记 第1课 ——Hello World</h3> <h4 id="0x00-写在前面">0x00 写在前面</

我是小学生的博客 550

1. SAP Fiori Elements 开发环境的搭建和开发准备工作

本文介绍了本地使用 Visual Studio Code 进行 Fiori Elements 开发所需要安装的这个扩展包里6个能够提高 Fiori Elements 应用开发效率的扩展。在本教程后续步骤里我们会通过实际的例子介绍这些 Visual Studio Code 扩展的详细用法。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3447

一些神级工具与网址

常用的网址

srmmh的博客 5017

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5746

SAP 消息号T-CODE

SAP消息号修改汇总 确实有很多消息是可以修改的 FI: oBA5|oFMG|oFPM MM: oMRM|oKZZ|oMT4|oMCQ|o04C| SD: oVAH(V4)|oVM1(VL) CO:  oPR4_ACT|oPR4_CK|oPR4_CKML|oPR4_CKPF|oPR4_KKA|oPR4_KKP|oPR4_KKS| oPR4_KKS1|oPR4_P

heng0757的专栏 1万+

从 WAIC 2026 打开人工智能:一部正在发生的科技史诗

2026年7月17日到20日,上海世博展览馆。1100多家企业、3000多项展品、300多款全球首发——第九届世界人工智能大会(WAIC 2026)又一次把全球AI圈的目光拉到了黄浦江畔。但这次不一样:机器人不再只是在玻璃柜里挥挥手,而是真的在展馆里走楼梯、搬箱子、给你倒咖啡。AI也不再只是聊天机器人,而是能自己规划任务、调用工具、给你交活的"数字员工"。本文以WAIC 2026为窗口,倒带70年,聊聊AI是怎么从一群人的异想天开,变成改变世界的力量的。

weixin_72753562的博客 352

让 PyCharm 代码“发光”:高亮插件与特效全攻略

PyCharm 作为一款强大的 Python IDE,支持多种插件让代码“发光”——无论是动态输入特效、彩虹括号,还是霓虹主题,都能让你的代码脱颖而出!进入 File → Settings → Editor → Color Scheme → Rainbow Brackets。进入 File → Settings → Appearance & Behavior → Material Theme。进入 File → Settings → Editor → Color Scheme → General。

qq_43580271的博客 3834

iOS 多语言本地化教程,VS Code KXApp 编辑 String Catalog .xcstrings

做 iOS 多语言本地化总要在 VS Code 和 Xcode 之间来回切?这篇讲用 KXApp(快蝎)在 VS Code 里直接编辑 String Catalog(.xcstrings):双击打开和 Xcode 一样的表格,`.xcstrings` 与老的 `.strings`、`.stringsdict` 同表编辑,加语言同步登记到工程、从源码扫描同步新 key,复数、设备变体和变量占位都在表里处理,改源语言文本后已有翻译自动标需复核。文件仍是标准格式,回 Xcode 打开一致。

2501_91592143的博客 158

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

成为全栈·基础补充·Nginx 入门:反向代理与静态托管

Nginx 可以托管前端静态文件,也可以作为反向代理把 HTTPS 请求转给内部 API。本文从请求路径讲起,解释反向代理、静态目录、代理头、路径拼接、可信 IP、Cookie、上传体积、超时和缓存边界,并提供配置结构示例和逐层排查顺序。配置片段需要结合实际证书、路由和运行平台验证,不能直接复制为生产方案。

FungLeo's Blog 289

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Android 开发入门实践(二):Kotlin 空安全,从可空类型到安全访问

延续 NewsApp 项目中的新闻标题练习,记录 Kotlin 安全调用。

Easyhood的博客 276

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Android Message源码阅读

本文梳理了Android Handler机制中Message的核心设计:链表结构、消息复用池(sPool)及回收机制,重点解析了异步消息与同步屏障(SyncBarrier)的协同机制。当主线程需优先处理UI绘制等高优先级任务时,系统通过postSyncBarrier插入屏障,使Looper跳过普通同步消息,优先执行标记为异步的UI渲染任务,确保帧率流畅。该机制是保障Android界面响应性的关键技术之一。

u012116089的博客 183

指纹浏览器手机版能用吗?区分原生 App、移动网页模拟与云手机

本文说明“指纹浏览器手机版”可能指手机原生 App、远程云端浏览器、电脑模拟手机网页或云手机。通过对比运行位置与可完成的任务,提供下载前的四项核对方法,帮助读者选择适合网页操作或 Android App 的方案。

2601_96176203的博客 134

Android 面试题逐题简析:28 个专题,232 题

常见原因是未在 onMeasure 处理 AT_MOST 下的期望尺寸,沿用了默认测量而占满可用区域,或未考虑内容、padding 和最小尺寸。应计算 desiredWidth/Height,再通过 resolveSizeAndState 等与父约束合并。wrap_content 是测量输入,框架不会自动知道自定义内容想要多大。

一个踩这七色彩虹的路人甲 151

云手机私有化部署完整方案:基于ARM服务器搭建私有安卓云集群

ARM 服务器是私有化安卓云集群最优硬件底座,原生架构匹配 Android,高密度、低损耗,非常适合企业内网场景。整套私有化方案的核心,从来不是 “跑起来安卓”,而是隔离可控、可审计、可运维、可扩容。两条路线各有取舍:开源自建灵活、门槛高;商用私有化交付开箱即用、安全能力完备,是当前企业生产环境主流方案。六边云手机私有化方案,补齐了自建方案在驱动适配、管控平台、审计合规、信创适配上的短板,适合对数据主权、内网隔离有强需求的政企、自研 App、垂直行业客户。

a598652的博客 308

Android 开发入门实践(九):把新闻数据与页面状态交给 ViewModel

本文记录第110—117课学习成果:将页面标题、新闻列表及选中编号逐步迁移至NewsViewModel,通过ViewModelProvider获取实例并读取数据。页面调用ViewModel方法处理选择与返回,实现状态管理解耦。过程中纠正了对Activity重建机制的误解,并厘清mutableStateOf的可观察性与ViewModel对象生命周期的区别,深化了对Compose状态更新机制的理解。

Easyhood的博客 203

Android 17 全栈性能分析关键字与源码手册

FrameTimeline 找异常帧,ATrace 找阶段,thread_state 找等待类型,ftrace 找内核原因,Simpleperf 找 CPU 热点,驱动源码找最终触发条件;任何根因结论都必须回到同一对象、同一时间窗口和同一条依赖链。

weixin_43228946的博客 362

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 229

Android 系统启动与调试中的日志抓取方式全解析

│ 用户操作/系统事件 ││ │▼ ▼│ (驱动/硬件/内存管理) │ │ (App/SystemServer) ││ │ │ ││ │▼ ▼│ dmesg 命令 │ │ logd daemon ││ cat /proc/kmsg │ │ (分类存储到分区) ││ │▼ ▼│ 串口 UART │ │ logcat 命令 ││ (硬件直连,最早输出) │ │ adb logcat ││ │▼│ (汇总所有日志+系统状态) │工具最佳用途关键优势主要局限dmesg。

zhaoshuzhaoshu的专栏 256

【Android】听写播放器改版:中英文书写速度拆项与「正在读」高亮

现象:把播放页主体抽成后,里面给LazyColumn加想让它占满剩余高度,编译报错(weight 不可用)。原因weight不是通用修饰符,是RowScope的扩展函数。是个普通函数,函数体里没有接收者,自然调不到。解决private fun ColumnScope.PlaybackBody(...) { /* 这里就能用 Modifier.weight(1f) */ }调用处仍在原来的Column { }里,无需改动。预防:Compose 的布局修饰符都是作用域绑定。

木头大左的博客 220

成为全栈·基础补充·Node.js 运行时:事件循环与异步

Node.js 如何在一个主 JavaScript 执行线程上处理大量网络请求?本文解释同步阻塞、异步 I/O、事件循环、Promise 微任务、libuv 线程池和 CPU 并行的区别,并说明 async/await 不会自动开启线程。文章还介绍异步错误、超时、取消、性能诊断和 Worker Threads 的适用边界,最后与 Go goroutine 做概念对照。

FungLeo's Blog 271
上一篇: Android菜鸟日记10 SQLite 数据库
下一篇: Android菜鸟日记12 Gallery
iPoolo
博客等级 码龄17年 2粉丝 168原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值