jni如何读取assets下图片二进制文件

jni如何读取assets下图片二进制文件,第1张

你这样直接转换是不行的JNIEXPORT jbyteArray JNICALL Java_Test_getByteArray(JNIEnv env, jobject obj){jbyteArray firstMacArray = env->NewByteArray( 6 );elidedjbyte bytes = env->GetByteArrayElements( firstMacArray, 0);for ( int i = 0; i < sizeof( pAdapterInfo->Address ); i++ ){bytes[ i ] = pAdapterInfo->Address[ i ];}env->SetByteArrayRegion(firstMacArray, 0, 6, bytes );return firstMacArray;}另外,给你一个有关各种转换的博客 >

assets文件里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。

   1 先在Activity里面调用getAssets() 来获取AssetManager引用。

   2 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。

   3 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStreamclose() 。

   4调用AssetManagerclose() 关闭AssetManager。

需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的 *** 作

代码

    public String getFromAssets(String fileName){ 

            try { 

                 InputStreamReader inputReader = new InputStreamReader( getResources()getAssets()open(fileName) ); 

                BufferedReader bufReader = new BufferedReader(inputReader);

                String line="";

                String Result="";

                while((line = bufReaderreadLine()) != null)

                    Result += line;

                return Result;

            } catch (Exception e) { 

                eprintStackTrace(); 

            }

    }

AssetManager assetManager = getAssets();

String[] files = null;

try {

files = assetManagerlist("");

} catch (IOException e) {

Loge("tag", egetMessage());

}

再去用File判断是文件、还是目录

在自己的app中安装assets目录下的apk文件的方法:

详细过程如下:

public class MainActivity extends Activity {

Context mContext;

@Override

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

mContext = this;

//ToastmakeText(this, ""+EnvironmentgetExternalStorageDirectory()getAbsolutePath(), 0)show();

if(copyApkFromAssets(this, "testapk", EnvironmentgetExternalStorageDirectory()getAbsolutePath()+"/testapk")){

Builder m = new AlertDialogBuilder(mContext)

setIcon(Rdrawableic_launcher)setMessage("是否安装?")

setIcon(Rdrawableic_launcher)

setPositiveButton("yes", new OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

Intent intent = new Intent(IntentACTION_VIEW);

intentaddFlags(IntentFLAG_ACTIVITY_NEW_TASK);

intentsetDataAndType(Uriparse("file://" + EnvironmentgetExternalStorageDirectory()getAbsolutePath()+"/testapk"),

"application/vndandroidpackage-archive");

mContextstartActivity(intent);

}

});

mshow();

}

}

public boolean copyApkFromAssets(Context context, String fileName, String path) {

boolean copyIsFinish = false;

try {

InputStream is = contextgetAssets()open(fileName);

File file = new File(path);

filecreateNewFile();

FileOutputStream fos = new FileOutputStream(file);

byte[] temp = new byte[1024];

int i = 0;

while ((i = isread(temp)) > 0) {

foswrite(temp, 0, i);

}

fosclose();

isclose();

copyIsFinish = true;

} catch (IOException e) {

eprintStackTrace();

}

return copyIsFinish;

}

}

从assets文件夹中读取txt文件 Android除了提供/res目录存放资源文件外,在/assets目录也可以存放资源文件,而且/assets目录下的资源文件不会在Rjava自

你获取的uri没有问题。但assets目录下的不能使用这种方法读取。你得把它先复制到sdcard中,然后从sdcard中传递这个至于原因嘛:assets目录里面的资源文件还在应用程序的apk文件中,一个压缩文件中。所以不能这样读

1默认Android Studio的assets文件夹路径:src/main/assets,在assets文件夹创建teachcoursexml文件,引用该文件的写法:

123456InputStream is = null;AssetManager manager = getAssets();try { is = manageropen("teachcoursexml");} catch (Exception e) { eprintStackTrace();}

2直接写上assets文件夹内文件的名称,使用AssetsManager管理器打开,获取输入流,最后解析里面的内容

以上就是关于jni如何读取assets下图片/二进制文件全部的内容,包括:jni如何读取assets下图片/二进制文件、android如何获取assets文件夹下面文件的大小、Android 在assets的子文件夹如何读等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9318967.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存