Android Studio中Assets文件路径问题求助(非getAssets().open()方案)
解决Android Studio中Assets文件路径访问的核心问题
首先得明确一个关键事实:Assets目录下的资源是打包进APK内部的,并非设备文件系统中的独立文件,因此没有可直接通过File类访问的真实路径——这就是你用new File(path_of_text_file_in_assets)会失败的根本原因。结合你的两个使用场景,我给你针对性的解决方案:
场景1:需要写入Assets中的文本文件(使用FileWriter)
首先要纠正一个误区:Assets资源是只读的,你根本无法直接写入Assets目录下的文件。如果你的需求是生成或修改文本文件,必须把文件放在应用可写的存储目录里,比如内部存储、外部存储或者缓存目录:
示例代码(写入内部存储)
// 获取应用内部存储的文件路径(只有你的应用能访问,无需权限) File textFile = new File(getFilesDir(), "my_text_file.txt"); try { FileWriter fw = new FileWriter(textFile); BufferedWriter bw = new BufferedWriter(fw); // 执行写入操作 bw.write("需要写入的内容"); // 记得关闭流 bw.close(); fw.close(); } catch (IOException e) { e.printStackTrace(); }
如果你的需求是先读取Assets里的文本内容,再修改后写入,那可以先用getAssets().open()读取原内容,再写入到上述可写目录中。
场景2:需要将Assets子文件夹中的图片作为File传入方法
因为没法直接获取Assets图片的File对象,这里有两种可行方案:
方案1:将Assets图片复制到可访问目录后使用
把Assets里的图片复制到应用的缓存目录或内部存储,然后用复制后的File对象传入方法:
AssetManager assetManager = getAssets(); // 获取应用缓存目录(无需权限,系统会自动清理) File cacheDir = getCacheDir(); // 目标文件路径(对应Assets里的subfolder/my_image.png) File imageFile = new File(cacheDir, "subfolder/my_image.png"); // 创建父目录(如果不存在) imageFile.getParentFile().mkdirs(); // 复制Assets文件到目标路径 try (InputStream is = assetManager.open("subfolder/my_image.png"); OutputStream os = new FileOutputStream(imageFile)) { byte[] buffer = new byte[1024]; int length; while ((length = is.read(buffer)) > 0) { os.write(buffer, 0, length); } } catch (IOException e) { e.printStackTrace(); } // 现在可以将这个imageFile传入你的方法 StringBuilder sbFeatureX = uniformQuantization(imageFile);
方案2:修改uniformQuantization方法的参数(更高效)
如果有权限修改这个方法的参数,建议把参数从File改成InputStream,这样无需复制文件,直接用Assets的输入流即可:
// 直接获取Assets图片的输入流 try (InputStream is = getAssets().open("subfolder/my_image.png")) { StringBuilder sbFeatureX = uniformQuantization(is); } catch (IOException e) { e.printStackTrace(); }
额外注意事项
- Assets的路径是相对根目录的,比如子文件夹里的图片路径直接写
"subfolder/my_image.png"即可,不要加任何前缀(比如file:///android_asset/这类前缀也无法直接用于File类)。 - 如果你需要访问外部存储,记得在AndroidManifest.xml中申请对应权限(Android 10及以上还需要考虑分区存储规则)。
内容的提问来源于stack exchange,提问作者Sadegh Rahmani
相关产品推荐
相关产品推荐

