public class CopyFile extends Activity {
private static String APP_NAME = "MyAssets";
private Button mButton;
private LinearLayout mLayout;
private AssetManager mAsset;
private ProgressDialog mDialog;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo
.SCREEN_ORIENTATION_LANDSCAPE);
mLayout = new LinearLayout(this);
mButton = new Button(this);
mLayout.setOrientation(LinearLayout.VERTICAL);
mButton.setText("Copy File");
mButton.setLayoutParams(new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
mLayout.addView(mButton);
setContentView(mLayout);
mAsset = getAssets();
mDialog = new ProgressDialog(this);
mButton.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
startCopy();
}
});
}
public void startCopy(){
showProgress();
Thread t = new Thread(new ProcessCopy());
t.start();
}
public class ProcessCopy implements Runnable{
public void run(){
doCopy();
mHandler.sendEmptyMessage(MESSAGE_COMPLETE);
}
}
public void onStart(){
super.onStart();
System.out.println("onStart......");
}
public void doCopy(){
try {
String[] arrFile = mAsset.list("");
if (arrFile != null) {
for (int i = 0; i < arrFile.length; i++) {
System.out.println(arrFile[i]);
copyFile(arrFile[i]);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* copy file from assets to sd
*/
public void copyFile(String path){
try {
String[] list = mAsset.list(path);
InputStream is = null;
if (list != null && list.length != 0) {
for (int i = 0; i < list.length; i++) {
System.out.println(path + "/" + list[i]);
copyFile(path + "/" + list[i]);
}
} else {//濡傛灉涓虹┖锛屽垯璁や负瀹冩槸涓�釜鏂囦欢
System.out.println("copy file: " + path);
is = mAsset.open(path);
saveFileToSD(is, path);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* save file to sd
* @param is
* @param path
*/
public void saveFileToSD(InputStream is, String path){
String sp = Environment.getExternalStorageDirectory() + "/" + APP_NAME + "/";
File f = new File(sp + path);
String parentDir = f.getParent();
File parentFile = new File(parentDir);
if (!parentFile.exists()) {
parentFile.mkdirs();
System.out.println("create dir " +parentFile.getPath());
}
if (!f.exists()) {
try {
f.createNewFile();
System.out.println("create new file " + f.getPath());
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("delete file " + f.getPath());
f.delete();
}
try {
DataInputStream dis = new DataInputStream(is);
FileOutputStream fOut = new FileOutputStream(f);
int n = 1024;
byte[] buffer = new byte[n];
int num;
while ((num = dis.available()) != 0) {
dis.readFully(buffer, 0, num);
fOut.write(buffer);
}
fOut.flush();
fOut.close();
dis.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* show progress dialog
*/
public void showProgress(){
mDialog = ProgressDialog.show(this, "Title", "Copying, please wait...");
}
public static final int MESSAGE_COMPLETE = 0;
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case MESSAGE_COMPLETE:
mDialog.dismiss();
break;
}
}
};
}
分享到:
相关推荐
python爬虫案例
2023年下半年计算机等级一级考试Photoshop考点梳理 2023年下半年计算机等级一级考试WPS office考点汇总 2023年下半年计算机二级考试公共基础知识科目考点汇总 根据实际考试情况进行的总结。
Introduction to Data Science Data Analysis and Prediction Algorithms with R 英文原版,完整带目录,非常好的数据分析资料,有基于R的完整数据分析过程
数电实验三:74LS151逻辑功能测试、74LS153逻辑功能测试、74LS153全加器、三输入多数表决电路
农业机械维修记录(表式).doc
go语言优质学习资源和工具与案列应用场景.txt
网络攻防课程seed-labs实验-Spectre_Attack.zip
GameAssistant_300200000_0_ 2.exe
电商小程序前端模板下载。
MySQL开发案列优质学习资料资源工具与案列应用场景开发文档教程资料.txt
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
2024海外营销日历.zip
最新版点微同城源码34.7+全套插件+小程序前后端附图片 模板挺好看的 带全套插件 自己耐心点配置一下插件 可以H5可以小程序
最新二开微信表情包小程序+前后端 【去授权版】,带简单文本教程,已经去除授权加二开 内含二开版本和表情包-黄色版本
python爬虫案例
端午节相关庆祝代码的示例
开源光谱分析仪项目的代码,作出了一些改进: 1.添加了详细的中文注释; 2.把图片中的英文图例说明改成了中文图例,图例字体设置为宋体;
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
随着网络的逐渐普及,Email在人们生活中应用日益广范,除了专业的邮件服务系统之外,一般大型网站与单位都提供了email服务。因此,本次设计是通过对SMTP、pop3协议的熟悉和理解、以及对JSP编程和网页设计技能的掌握,开发出一个简单的B/S结构下的邮件服务系统。能完成邮件的发送、接收、以及附件处理功能等。主要运用的软件有Eclipse, SQL Server,在JAVA环境下,利用JSP编程来实现邮件系统的各种功能。该系统主要支持用户的身份验证,用户只有通过正确注册后才能进入该系统。在系统中可以查看自己的邮件也可以发送邮件到任意的邮箱,发邮件的时候可以进行附件的发送。通过本次课题的学习和研究掌握了基本的web编程技能,更实践了自我的动手能力。同时认识到在信息化高速发展的今天,高效、快速、方便的邮件收发系统将得到越来越多的人关注和使用,它将给人们带来更方便快捷的生活。
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。