Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类

2024-05-24 03:18

本文主要是介绍Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


(1)文件的目录


(2)各文件的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><ImageViewandroid:id="@+id/imageView1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentTop="true"android:layout_alignRight="@+id/button1"android:layout_marginRight="44dp"android:layout_marginTop="78dp"android:src="@drawable/ic_launcher" /><Buttonandroid:id="@+id/button1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:layout_below="@+id/imageView1"android:layout_marginLeft="96dp"android:layout_marginTop="106dp"android:text="Button" /></RelativeLayout>


FileService.java也就是操作sdcard的工具类:

package com.example.data_storage_sdcard.file;import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;import android.os.Environment;/*** sdcard的存在于上下文无关* * @author piaodangdehun* */
public class FileService {/** 存放在sdcard的根目录*/public boolean saveFileToSdcardRoot(String fileName, byte[] data) {boolean flag = false;/** 先判断sdcard的状态,是否存在*/String state = Environment.getExternalStorageState();FileOutputStream outputStream = null;File rootFile = Environment.getExternalStorageDirectory(); // 获得sdcard的根路径/** 表示sdcard挂载在手机上,并且可以读写*/if (state.equals(Environment.MEDIA_MOUNTED)) {File file = new File(rootFile, fileName);try {outputStream = new FileOutputStream(file);try {outputStream.write(data, 0, data.length);flag = true;} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}return flag;}/** 存放在sdcard下自定义的目录*/public boolean saveFileToSdcardDir(String fileName, byte[] data) {boolean flag = false;/** 先判断sdcard的状态,是否存在*/String state = Environment.getExternalStorageState();FileOutputStream outputStream = null;File rootFile = Environment.getExternalStorageDirectory(); // 获得sdcard的根路径/** 表示sdcard挂载在手机上,并且可以读写*/if (state.equals(Environment.MEDIA_MOUNTED)) {File file = new File(rootFile.getAbsoluteFile() + "/txt");if (!file.exists()) {file.mkdirs();}try {outputStream = new FileOutputStream(new File(file, fileName));try {outputStream.write(data, 0, data.length);flag = true;} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}return flag;}/** 用于读取sdcard的数据*/public String readContextFromSdcard(String fileName) {String state = Environment.getExternalStorageState();File rooFile = Environment.getExternalStorageDirectory(); // 获得sdcard的目录FileInputStream inputStream = null;// 用于度取数据的流ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); // 用于存放独处的数据if (state.equals(Environment.MEDIA_MOUNTED)) {File file = new File(rooFile.getAbsoluteFile() + "/txt/");// 在sdcard目录下创建一个txt目录File file2 = new File(file, fileName);int len = 0;byte[] data = new byte[1024];if (file2.exists()) {try {inputStream = new FileInputStream(file2);try {while ((len = inputStream.read(data)) != -1) {outputStream.write(data, 0, data.length);}} catch (IOException e) {e.printStackTrace();}return new String(outputStream.toByteArray());} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}}return null;}/*** 对文件进行分类的保存到固定的文件中去* * @param fileName* @param data*/public void saveFileToSdcardBySuff(String fileName, byte[] data) {// File file = Environment.getExternalStoragePublicDirectory("");// 保存文件的目录File file = null;if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {/** 将不同的文件放入到不同的类别中*/if (fileName.endsWith(".mp3")) {file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);} else if (fileName.endsWith(".jpg") || fileName.endsWith(".png")|| fileName.endsWith(".gif")) {file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);} else if (fileName.endsWith(".mp4") || fileName.endsWith(".avi")|| fileName.endsWith(".3gp")) {file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES);} else {file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);}FileOutputStream outputStream = null;try {outputStream = new FileOutputStream(new File(file, fileName));try {outputStream.write(data, 0, data.length);} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}}/** 删除一个文件*/public boolean deleteFileFromSdcard(String folder, String fileName) {boolean flag = false;File file = Environment.getExternalStorageDirectory();if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {File exitFile = new File(file.getAbsoluteFile() + "/" + folder);if (exitFile.exists()) {exitFile.delete();}}return flag;}
}

HttpUtils.java访问网络的

package com.example.data_storage_sdcard.http;import java.io.IOException;import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;public class HttpUtils {/** */public static byte[] getImage(String path) {byte[] data = null;HttpClient httpClient = new DefaultHttpClient();HttpPost httpPost = new HttpPost(path);try {HttpResponse response = httpClient.execute(httpPost);if (response.getStatusLine().getStatusCode() == 200) {data = EntityUtils.toByteArray(response.getEntity());}} catch (ClientProtocolException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {httpClient.getConnectionManager().shutdown();}return data;}
}

ImageCache.java将文件放到cache中的:

package com.example.data_storage_sdcard.img;import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;import android.os.Environment;public class ImageCache {public static  String saveImageCache(String fileName, byte[] data) {File file = Environment.getExternalStorageDirectory(); // 根目录FileOutputStream outputStream = null;if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {try {outputStream = new FileOutputStream(new File(file, fileName));outputStream.write(data, 0, data.length);return file.getAbsolutePath() + "/" + fileName;} catch (Exception e) {e.printStackTrace();} finally {if (outputStream != null) {try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}}}return null;}
}

MainActivity.java

package com.example.data_storage_sdcard;import android.app.Activity;
import android.app.ProgressDialog;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;import com.example.data_storage_sdcard.http.HttpUtils;
import com.example.data_storage_sdcard.img.ImageCache;public class MainActivity extends Activity {private Button button;private ImageView imageView;private ProgressDialog progressDialog;private String imageName;private final String pathString = "http://www.baidu.com/img/bd_logo1.png";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button = (Button) this.findViewById(R.id.button1);imageView = (ImageView) this.findViewById(R.id.imageView1);progressDialog = new ProgressDialog(this);progressDialog.setTitle("下载提示");progressDialog.setMessage("load...");button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {new MyTask().execute(pathString);}});}class MyTask extends AsyncTask<String, Void, byte[]> {@Overrideprotected void onPreExecute() {super.onPreExecute();progressDialog.show();}@Overrideprotected byte[] doInBackground(String... params) {String name = params[0];imageName = name.substring(name.lastIndexOf("/") + 1, name.length());return HttpUtils.getImage(params[0]);}@Overrideprotected void onProgressUpdate(Void... values) {super.onProgressUpdate(values);}@Overrideprotected void onPostExecute(byte[] result) {super.onPostExecute(result);if (result != null) {Bitmap bm = BitmapFactory.decodeByteArray(result, 0,result.length);imageView.setImageBitmap(bm);ImageCache.saveImageCache("", result);} else {imageView.setImageResource(R.drawable.ic_launcher);}progressDialog.dismiss();}}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}

测试类:

package com.example.data_storage_sdcard;import java.io.FileWriter;import com.example.data_storage_sdcard.file.FileService;import android.nfc.Tag;
import android.test.AndroidTestCase;
import android.util.Log;public class MyTest extends AndroidTestCase {public void saveFileToSdcardTest() {FileService fileService = new FileService();fileService.saveFileToSdcardRoot("aa.txt","jkhdsfjkhdskjfhdsjf".getBytes());}public void saveFileToSdcardDir() {FileService fileService = new FileService();fileService.saveFileToSdcardRoot("aa.txt","jkhdsfjkhdskjfhdsjf".getBytes());}public void readContextFromSdcardTest() {FileService fileService = new FileService();String msg = fileService.readContextFromSdcard("aa.txt");System.err.println("-->" + msg);}public void saveFileToSdcardBySuffTest() {FileService fileService = new FileService();fileService.saveFileToSdcardBySuff("aa.avi","asdfkajsgdhagsdfhdgsf".getBytes());}public void delFile() {FileService fileService = new FileService();boolean flag = fileService.deleteFileFromSdcard("txt", "aa.txt");}
}

需要在请单位按中加入访问网络的权限、操作sdcard的权限、测试的权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.data_storage_sdcard"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="18" /><instrumentationandroid:name="android.test.InstrumentationTestRunner"android:targetPackage="com.example.data_storage_sdcard" ></instrumentation><!-- 添加访问sdcard的权限 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!-- 添加访问网络的权限 --><uses-permission android:name="android.permission.INTERNET" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><uses-library android:name="android.test.runner" /><activityandroid:name="com.example.data_storage_sdcard.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><uses-library></uses-library></application></manifest>




这篇关于Android学习笔记之数据的Sdcard存储方法及操作sdcard的工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/997217

相关文章

在MySQL中实现冷热数据分离的方法及使用场景底层原理解析

《在MySQL中实现冷热数据分离的方法及使用场景底层原理解析》MySQL冷热数据分离通过分表/分区策略、数据归档和索引优化,将频繁访问的热数据与冷数据分开存储,提升查询效率并降低存储成本,适用于高并发... 目录实现冷热数据分离1. 分表策略2. 使用分区表3. 数据归档与迁移在mysql中实现冷热数据分

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

C#解析JSON数据全攻略指南

《C#解析JSON数据全攻略指南》这篇文章主要为大家详细介绍了使用C#解析JSON数据全攻略指南,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、为什么jsON是C#开发必修课?二、四步搞定网络JSON数据1. 获取数据 - HttpClient最佳实践2. 动态解析 - 快速

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

Python使用openpyxl读取Excel的操作详解

《Python使用openpyxl读取Excel的操作详解》本文介绍了使用Python的openpyxl库进行Excel文件的创建、读写、数据操作、工作簿与工作表管理,包括创建工作簿、加载工作簿、操作... 目录1 概述1.1 图示1.2 安装第三方库2 工作簿 workbook2.1 创建:Workboo

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自