欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android 之 将RAW资源文件写入SD卡工具类

程序员文章站 2022-03-02 19:44:37
...
package com.sun.coptfiletosd;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Environment;
import android.util.Log;

/**
 * 工具类 , 用于将RAW 目录下的文件写入到数据库中
 * 
 * @author Administrator
 * 
 */
public class SDUtils {

	private String file; // 设置文件存放路径
	private String fileName; // 存放文件名称
	private Context context; // 获取到Context 上下文
	private int rawid; // 资源文件ID ,需要COPY 的文件
	private String DATABASE_PATH = "";
	private String DATABASE_NAME = "";

	public String getFile() {
		return file;
	}

	public void setFile(String file) {
		this.file = file;
		this.DATABASE_PATH = Environment.getExternalStorageDirectory()
				.getAbsolutePath() + "/" + file;
	}

	public String getFileName() {
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
		this.DATABASE_NAME = fileName;
	}

	public int getRawid() {
		return rawid;
	}

	public void setRawid(int rawid) {
		this.rawid = rawid;
	}

	public SDUtils() {
	}

	/**
	 * 
	 * @param file
	 *            文件夹例如: aa/bb
	 * @param fileName
	 *            文件名
	 * @param context
	 *            上下文
	 * @param rawid
	 *            资源ID
	 */
	public SDUtils(String file, String fileName, Context context, int rawid) {
		super();
		this.file = file;
		this.fileName = fileName;
		this.context = context;
		this.rawid = rawid;
		this.DATABASE_PATH = Environment.getExternalStorageDirectory()
				.getAbsolutePath() + "/" + file;
		this.DATABASE_NAME = fileName;
	}

	/**
	 * 将文件复制到SD卡,并返回该文件对应的数据库对象
	 * 
	 * @return
	 * @throws IOException
	 */
	public SQLiteDatabase getSQLiteDatabase() throws IOException {

		// 首先判断该目录下的文件夹是否存在
		File dir = new File(DATABASE_PATH);
		String filename1 = DATABASE_PATH + "/" + DATABASE_NAME;
		if (!dir.exists()) {
			// 文件夹不存在 , 则创建文件夹
			dir.mkdirs();
		}

		// 判断目标文件是否存在
		File file1 = new File(dir, DATABASE_NAME);

		if (!file1.exists()) {
			Log.i("msg", "没有文件,开始创建");
			file1.createNewFile(); // 创建文件

		}

		Log.i("msg", "准备开始进行文件的复制");
		// 开始进行文件的复制
		InputStream input = context.getResources().openRawResource(rawid); // 获取资源文件raw
																			// 标号
		try {

			FileOutputStream out = new FileOutputStream(file1); // 文件输出流、用于将文件写到SD卡中
																// -- 从内存出去
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = (input.read(buffer))) != -1) { // 读取文件,-- 进到内存

				out.write(buffer, 0, len); // 写入数据 ,-- 从内存出
			}

			input.close();
			out.close(); // 关闭流

			SQLiteDatabase sqlitDatabase = SQLiteDatabase.openOrCreateDatabase(
					filename1, null);
			return sqlitDatabase;
		} catch (Exception e) {

			e.printStackTrace();
		}

		return null;

	}

}