Android 将assets中的识别库复制到SD卡中

最近做一个OCR识别VIN的项目,其中用到了将字库复制到SD卡中的功能,在此记录下,下次要用方便,不用再那么难找。废话不多说,上代码是个工具类,要用直接调用,传几个参数就可以了。
/**
 * 将assets中的识别库复制到SD卡中
 */

public class SDUtils {
    private static final String TAG = "SDUtils";

    /**
     * 将assets中的识别库复制到SD卡中
     *
     * @param path 要存放在SD卡中的 完整的文件名。这里是"/storage/emulated/0//tessdata/chi_sim.traineddata"
     * @param name assets中的文件名 这里是 "chi_sim.traineddata"
     */
    public static void assets2SD(Context context, String path, String name) {
        Log.e(TAG, "assets2SD: " + path);
        Log.e(TAG, "assets2SD: " + name);

        //如果存在就删掉
        File f = new File(path);
        if (f.exists()) {
            f.delete();
        }
        if (!f.exists()) {
            File p = new File(f.getParent());
            if (!p.exists()) {
                p.mkdirs();
            }
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        InputStream is = null;
        OutputStream os = null;
        try {
            is = context.getAssets().open(name);
            File file = new File(path);
            os = new FileOutputStream(file);
            byte[] bytes = new byte[2048];
            int len = 0;
            while ((len = is.read(bytes)) != -1) {
                os.write(bytes, 0, len);
            }
            os.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null)
                    is.close();
                if (os != null)
                    os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
}
使用方法,在初始化的地方直接调用传参即可。
/**
 * TessBaseAPI初始化用到的第一个参数,是个目录。
 */
private static final String DATAPATH = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator;
/**
 * 在DATAPATH中新建这个目录,TessBaseAPI初始化要求必须有这个目录。
 */
private static final String tessdata = DATAPATH + File.separator + "tessdata";
/**
 * TessBaseAPI初始化测第二个参数,就是识别库的名字不要后缀名。
 */
private static String DEFAULT_LANGUAGE = "chi_sim";
/**
 * assets中的文件名
 */
private static  String DEFAULT_LANGUAGE_NAME = DEFAULT_LANGUAGE + ".traineddata";
/**
 * 保存到SD卡中的完整文件名
 */
private static  String LANGUAGE_PATH = tessdata + File.separator + DEFAULT_LANGUAGE_NAME;
//Android6.0之前安装时就能复制,6.0之后要先请求权限,所以6.0以上的这个方法无用。assets2SD(getApplicationContext(), LANGUAGE_PATH, DEFAULT_LANGUAGE_NAME);



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值