安卓存储数据和文件系列1:读写sdCard方式

在android手机存储数据和文件的方式分为五种:1.文件存储(sd卡中)、2.采用共享参数(sharedpreferences)的方式存储、3.SQLite数据库存储、4.使用内容提供者(Content Provider)存储、5.存放在网络的服务器端。读写sdCard卡是常见的一种操作方式。下面我们来介绍一个这种方式的使用。

整体思路:定义一个FileService类,在这个类中定义一个getFileFromSdcard方法,用于传一个文件名参数读取sdCard卡中的文件返回读取的字符串,定义一个saveContentToSdcard方法,用于传一个文件名参数和一个字符串参数,来将这个字符串写入这个文件,并保存于sdCard卡中;创建一个继承AndroidTestCase的单元测试类MyTest,在这个类中定义saveFile方法,在方法中实例化一个FileService对象,并调用saveContentToSdcard这个方法,将指定字符串写入对应文件,并存储于sdCard卡,在这个类中定义另一个方法readFile,在这个方法中实例化一个FileService对象,并调用getFileFromSdcard这个方法,读取指定的文件,并将该文件中的字符串输出。注意要在清单文件AndroidManifest.xml文件中加上单元测试和读写sdCard卡的授权。

FileService.java文件:

public class FileService {

	private Context context;
	
	public FileService(Context context) {
		this.context=context;
	}
	
	public FileService(){
		
	}
	
	public String getFileFromSdcard(String fileName){
		FileInputStream inputStream=null;
//		缓存的流,与磁盘无关,不需要关闭,会写在缓冲区里面
		ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
		File file=new File(Environment.getExternalStorageDirectory(),fileName);
		if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
			try {
				inputStream=new FileInputStream(file);
				int len=0;
				byte[] data=new byte[1024];
				while ((len=inputStream.read(data))!=-1) {
					outputStream.write(data,0,len);
				}
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				if(inputStream!=null){
					try {
						inputStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		
		return new String(outputStream.toByteArray());
	}
	/**
	 * 
	 * @param fileName 文件名称
	 * @param content  文件内容
	 * @return
	 */
	public boolean saveContentToSdcard(String fileName,String content){
		boolean flag=false;
		FileOutputStream fileOutputStream=null;
//		获得sdcard卡所在的路径
		File file=new File(Environment.getExternalStorageDirectory(),fileName);
//		判断sdCard是否可用
		if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
			try {
				fileOutputStream=new FileOutputStream(file);
				fileOutputStream.write(content.getBytes());
				flag=true;
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				if(fileOutputStream!=null){
					try {
						fileOutputStream.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
		return flag;
	}
}
MyTest.java文件:

public class MyTest extends AndroidTestCase {

	private final String TAG="MyTest";
	public MyTest() {
		// TODO Auto-generated constructor stub
	}
	
//在sdCard中写入文件
	public void saveFile(){
		Context context=getContext();
		FileService fileService=new FileService(context);
		boolean flag=fileService.saveContentToSdcard("hello.txt", "你好");
		Log.i(TAG, "-->>"+flag);
		
	}
	
//	读取sdCard中文件的内容
	public void readFile(){
		Context context=getContext();
		FileService fileService=new FileService(context);
		String msgString=fileService.getFileFromSdcard("hello.txt");
		Log.i(TAG, "-->>"+msgString);
	}
}
AndroidManifest.xml文件:

<span style="color:#cc66cc;">  </span><!-- 添加读写sdcard的授权 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <!-- 单元测试 -->
    <instrumentation
        android:name="android.test.InstrumentationTestRunner"
        android:targetPackage="com.example.android_sdcard" >
    </instrumentation>
<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- 这里加一句话 -->
        <uses-library android:name="android.test.runner"/>
        <activity
            android:name="com.example.android_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>
    </application>





你可能感兴趣的:(安卓,存储数据,存储文件,读写sdCard)