数据存储-文件(文件的读取、把文件存储到SD卡中)

一、Android数据存储方式

•1.文件
•2.SQLite数据库
•3.SharedPreferences(参数)
•4.内容提供者(Content Providers)
•5.网络



二、文件操作模式

•1.Context.MODE_PRIVATE-私有模式:写入的内容会覆盖原文件的内容,且其它应用无法访问该文件
直接new FileOutputStream时第二个参数设置为true,也是追加模式
•2.Context.MODE_APPEND-追加模式:把内容追加到文件末尾,不会覆盖原文件的内容,且其它应用无法访问该文件
•3.Context.MODE_WORLD_READABLE:表示当前文件可以被其它应用读取
•4.Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其它应用写入
如果希望文件被其它应用读和写,可以写成:
openFileOutput(filename,Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);


三、getCacheDir()和getFilesDir()方法
1)getCacheDir():获取"/data/data/<package_name>/cache"目录
2)getFilesDir():获取"/data/data/<package_name>/files"目录


四、两个方法

1.openFileOutput (String name, int mode)

  name:文件的名称,不能包含分隔符"/",如果文件不存在,Android会自动创建它。创建的文件保存在/data/data/<package_name>/files目录下。

  mode:操作模式

2.openFileInput (String name)


五、文件事例

FileStream_MainAct.java

/**
 *
		<activity 
		    android:name="com.test.FileStream.FileStream_MainAct"
		    android:label="@string/app_name">
		    <intent-filter >
		        <action android:name="android.intent.action.MAIN"/>
		        <category android:name="android.intent.category.LAUNCHER"/>
		    </intent-filter>
		</activity>
		 
 */

import java.io.IOException;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class FileStream_MainAct extends Activity {
	
	private OnClickListener listener = null;
	public TextView filenameTV;
	public EditText filenameET;
	public TextView filecontentTV;
	public EditText filecontentET;
	private Button savebtn=null;
	private Button readbtn=null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.filestream_mainact);
		
		filenameTV = (TextView) findViewById(R.id.filenameTV);
		filenameET = (EditText) findViewById(R.id.filenameET);
		filecontentTV = (TextView) findViewById(R.id.filecontentTV);
		filecontentET = (EditText)findViewById(R.id.filecontentET);

		savebtn = (Button)findViewById(R.id.savebtn);
		readbtn = (Button)findViewById(R.id.readbtn);
	   
	    listener = new OnClickListener(){
	    	public void onClick(View v){
	    		switch(v.getId()){
		    		case R.id.savebtn:
		    			//save
						try {
							String filename = filenameET.getText().toString();
							String content = filecontentET.getText().toString();
							FileStreamService fileSave = new FileStreamService(getApplicationContext());
							fileSave.save(filename, content);
							Toast.makeText(FileStream_MainAct.this, filename+"保存成功", Toast.LENGTH_LONG).show();
						} catch (IOException e) {
							e.printStackTrace();
						}
		    			break;
		    		case R.id.readbtn:
		    			//read
						try {
							String filename = filenameET.getText().toString();
							FileStreamService fileSave = new FileStreamService(getApplicationContext());
							String str = fileSave.read(filename);
							Toast.makeText(FileStream_MainAct.this, str, Toast.LENGTH_LONG).show();
						} catch (IOException e) {
							e.printStackTrace();
						}
		    			break;
	    		}
	    	}
	    };
	    
		savebtn.setOnClickListener(listener);
		readbtn.setOnClickListener(listener);   
	}


}

FileStreamService.java
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 java.io.OutputStream;
import android.content.Context;
import android.os.Environment;
import android.util.Log;
import android.widget.Toast;


public class FileStreamService {

	private Context context;
	
	public FileStreamService(Context context) {
		this.context = context;
	}

	/**
	 * 保存文件在本应用目录下
	 * @param filename
	 * @param content
	 */
	public void save(String filename, String content) throws IOException{
		/**
		 * context.openFileOutput方法得到FileOutputStream创建的文件保存在"data/data/<package_name>/files"目录下
		 * 文件操作模式:
		  	context.openFileOutput方法得到FileOutputStream时的第二个参数
			1)Context.MODE_PRIVATE-私有操作模式:写入文件中的内容会覆盖原文件的内容,且其它应用无法访问该文件
			2)Context.MODE_APPEND-追加模式:把内容追加到文件末尾,不会覆盖原文件的内容,且其它应用无法访问该文件
			3)Context.MODE_WORLD_READABLE:表示当前文件可以被其它应用读取
			4)Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其它应用写入
			如果希望文件被其它应用读和写,可以写成:
			openFileOutput(filename, Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE);
		 * 
		 * 直接new FileOutputStream可以把第二个参数设置为true,即为追加模式
		 * 
		 */
		FileOutputStream outStream = context.openFileOutput(filename, Context.MODE_PRIVATE);
		outStream.write(content.getBytes());
		outStream.close();
	}
	
	/**
	 * 读取文件内容
	 * @param filename
	 * @return
	 * @throws IOException
	 */
	public String read(String filename) throws IOException{
		FileInputStream inStream = context.openFileInput(filename);
		byte[] buffer = new byte[1024];
		int len = 0;
		ByteArrayOutputStream outStream = new ByteArrayOutputStream();
		while((len = inStream.read(buffer)) != -1){
			outStream.write(buffer, 0, len);
		}
		
		byte[] data = outStream.toByteArray();
		inStream.close();
		outStream.close();
		return new String(data);
	}

	/**
	 * 保存文件到sd卡中
	 * @param filename
	 * @param content
	 * @throws IOException
	 * 
	 * 操作SD卡需要申请权限:
<!--     在SD卡中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!--     SD卡写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
	 */
	public void saveToSDCard(String filename, String content) throws IOException{
		//需要先获取sd卡的状态,避免sd卡已满或者写保护
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			//Environment.getExternalStorageDirectory():获取系统SD卡路径
			File file = new File(Environment.getExternalStorageDirectory(), filename);
			FileOutputStream outStream = new FileOutputStream(file);
			outStream.write(content.getBytes());
			outStream.close();
		}else{
			//sd卡不存在或者写保护
		}
	}
}





filestream_mainact.xml

<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=".s_demo_MainActivity" >

    <TextView
        android:id="@+id/filenameTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="文件名:" />
    
    <EditText
        android:id="@+id/filenameET"
        android:layout_width="200dp"
        android:layout_height="20dp"
        android:background="#ee0000"
        android:layout_toRightOf="@id/filenameTV"
        />

    <TextView
        android:id="@+id/filecontentTV"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="内容:"
        android:layout_below="@id/filenameET"
        />
     
    <EditText
        android:id="@+id/filecontentET"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#ee0000"
        android:layout_below="@id/filenameET"
        android:layout_toRightOf="@id/filecontentTV"
        />
    
    <Button
        android:id="@+id/savebtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/filecontentET"
        android:text="save"/>

    <Button
        android:id="@+id/readbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/filecontentET"
        android:layout_toRightOf="@id/savebtn"
        android:text="read"/>

</RelativeLayout>




4、getCacheDir()和getFilesDir()方法
1)getCacheDir():获取"/data/data/<package_name>/cache"目录
2)getFilesDir():获取"/data/data/<package_name>/files"目录



保存图片
public void saveBitmap(Bitmap bitmap)
	{
		Log.e(TAG, "保存图片");
		File f = new File("/data/data/com.ui/pic/", "111.jpg");
		if (f.exists())
		{
			f.delete();
		}
		try
		{
			FileOutputStream out = new FileOutputStream(f);
			bitmap.compress(Bitmap.CompressFormat.PNG, 90, out);
			out.flush();
			out.close();
			Log.i(TAG, "已经保存");
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值