Android文件存储详细完整示例

MainActivity如下:

package cc.cv;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * Demo描述:
 * 文件存储详细示例
 * 
 * 可利用Context的openFileOutput()方法将数据存储到文件中.
 * 默认的存储路径为/data/data/<packageName>/files/
 * 可利用Context的openFileInput()方法将数据从文件中读出
 * 
 * 在Android中常用的存储方式:
 * SharedPreferences,数据库,SD卡,文件存储.
 * 对于最后一种方式平时用的不多,现在此写个例子
 * 整理和复习一下.
 * 
 * 注意事项:
 * 文件存储是不需要权限的与在SD卡上进行文件存储是不一样的
 */
public class MainActivity extends Activity {
    private Button mSaveButton;
    private Button mGetButton;
    private Context mContext;
    private String mFileName;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}
	
	private void init(){
		mContext=this;
		mFileName="testData";
		mSaveButton=(Button) findViewById(R.id.saveButton);
		mSaveButton.setOnClickListener(new ClickListenerImpl());
		mGetButton=(Button) findViewById(R.id.getButton);
		mGetButton.setOnClickListener(new ClickListenerImpl());
	}

	private class ClickListenerImpl implements OnClickListener{
		@Override
		public void onClick(View view) {
			switch (view.getId()) {
			case R.id.saveButton:
				saveDataToFile(mContext,mFileName);
				break;
			case R.id.getButton:
				getDataFromFile(mContext,mFileName);
				break;
			default:
				break;
			}
		}
		
	}
	
	/**
	 * 向File中保存数据
	 */
	private void saveDataToFile(Context context,String fileName){
		String data="Hello,All";
		FileOutputStream fileOutputStream=null;
		OutputStreamWriter outputStreamWriter=null;
		BufferedWriter bufferedWriter=null;
		try {
			fileOutputStream=context.openFileOutput(fileName, Context.MODE_PRIVATE);
			outputStreamWriter=new OutputStreamWriter(fileOutputStream);
			bufferedWriter=new BufferedWriter(outputStreamWriter);
			bufferedWriter.write(data);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if (bufferedWriter!=null) {
					bufferedWriter.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
	}
	
	/**
	 * 从File中读取数据
	 */
	private void getDataFromFile(Context context,String fileName){
		FileInputStream fileInputStream=null;
		InputStreamReader inputStreamReader=null;
		BufferedReader bufferedReader=null;
		StringBuilder stringBuilder=null;
		String line=null;
		try {
			stringBuilder=new StringBuilder();
			fileInputStream=context.openFileInput(fileName);
			inputStreamReader=new InputStreamReader(fileInputStream);
			bufferedReader=new BufferedReader(inputStreamReader);
			while((line=bufferedReader.readLine())!=null){
				stringBuilder.append(line);
			}
			System.out.println("--->"+stringBuilder.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				if (bufferedReader!=null) {
					bufferedReader.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	

}

main.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"
    >

    <Button
        android:id="@+id/saveButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="向File中保存数据"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="100dp" />
    
    
     <Button
        android:id="@+id/getButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="从File中获取数据"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="260dp" />

</RelativeLayout>


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个完整示例,演示如何使用SQLite存储和读取图片: 1. 创建数据库表 在创建SQLite数据库表时,需要添加一个BLOB类型的列,用于存储图片的二进制数据。示例代码如下: ```java public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String DB_NAME = "my_database"; private static final int DB_VERSION = 1; private static final String TABLE_NAME = "image_table"; private static final String ID_COLUMN = "id"; private static final String NAME_COLUMN = "name"; private static final String IMAGE_COLUMN = "image"; public MyDatabaseHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db) { String sql = "CREATE TABLE " + TABLE_NAME + " (" + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT, " + NAME_COLUMN + " TEXT, " + IMAGE_COLUMN + " BLOB)"; db.execSQL(sql); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // do nothing } } ``` 2. 存储图片 在存储图片时,需要将图片转换成二进制数据,并将其保存到数据库中。示例代码如下: ```java public void saveImageToDB(String name, byte[] image) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues cv = new ContentValues(); cv.put(NAME_COLUMN, name); cv.put(IMAGE_COLUMN, image); db.insert(TABLE_NAME, null, cv); db.close(); } ``` 其中,`name`是图片的名称,`image`是图片的二进制数据。 3. 读取图片 在读取图片时,需要从数据库中查询指定名称的图片,并将其转换成Bitmap对象。示例代码如下: ```java public Bitmap getImageFromDB(String name) { SQLiteDatabase db = this.getReadableDatabase(); String[] columns = {IMAGE_COLUMN}; String selection = NAME_COLUMN + "=?"; String[] selectionArgs = {name}; Cursor cursor = db.query(TABLE_NAME, columns, selection, selectionArgs, null, null, null); if (cursor.moveToFirst()) { byte[] image = cursor.getBlob(cursor.getColumnIndex(IMAGE_COLUMN)); cursor.close(); db.close(); return BitmapFactory.decodeByteArray(image, 0, image.length); } cursor.close(); db.close(); return null; } ``` 其中,`name`是要读取的图片的名称,返回值是一个Bitmap对象。 4. 完整示例 以下是一个完整示例,演示如何使用SQLite存储和读取图片: ```java public class MainActivity extends AppCompatActivity { private static final int REQUEST_CODE = 1; private ImageView imageView; private MyDatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); dbHelper = new MyDatabaseHelper(this); imageView = findViewById(R.id.image_view); Button selectButton = findViewById(R.id.select_button); selectButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, REQUEST_CODE); } }); Button saveButton = findViewById(R.id.save_button); saveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); byte[] image = getBitmapAsByteArray(bitmap); dbHelper.saveImageToDB("my_image", image); Toast.makeText(MainActivity.this, "Image saved to database", Toast.LENGTH_SHORT).show(); } }); Button loadButton = findViewById(R.id.load_button); loadButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Bitmap bitmap = dbHelper.getImageFromDB("my_image"); if (bitmap != null) { imageView.setImageBitmap(bitmap); } else { Toast.makeText(MainActivity.this, "Image not found in database", Toast.LENGTH_SHORT).show(); } } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { Uri uri = data.getData(); imageView.setImageURI(uri); } } private byte[] getBitmapAsByteArray(Bitmap bitmap) { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream); return outputStream.toByteArray(); } @Override protected void onDestroy() { super.onDestroy(); dbHelper.close(); } } ``` 以上示例代码仅供参考,实际使用时需要进行适当修改。另外,存储图片到SQLite中并不是一个好的做法,建议存储图片到文件系统中,然后在数据库中存储图片的路径。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谷哥的小弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值