有没有办法获取资产文件夹中的一个文件的文件对象。我知道如何加载这样一个文件的输入流,但我需要一个文件对象而不是输入流。
这样我加载输入流
InputStream in2 = getInstrumentation().getContext().getResources().getAssets().open("example.stf2");
但我需要文件对象,这样就找不到文件了
File f = new File("assets/example.stf2");
答案 0 :(得分:8)
找到一个适用于我的情况的解决方案,mabye其他人也可以使用它。
将我的android测试项目中的文件检索到输入流
InputStream input = getInstrumentation().getContext().getResources().getAssets().open("example.stf2");
在测试中的Android应用程序的External-Cachedir上创建一个文件
File f = new File(getInstrumentation().getTargetContext().getExternalCacheDir() +"/test.txt");
将输入流复制到新文件
FileUtils.copyInputStreamToFile(input, f);
现在我可以将此文件用于我的进一步测试
答案 1 :(得分:0)
尝试以下代码: -
AssetManager am = getAssets();
InputStream inputStream = am.open(file:///android_asset/myfoldername/myfilename);
File file = createFileFromInputStream(inputStream);
private File createFileFromInputStream(InputStream inputStream) {
try{
File f = new File(my_file_name);
OutputStream outputStream = new FileOutputStream(f);
byte buffer[] = new byte[1024];
int length = 0;
while((length=inputStream.read(buffer)) > 0) {
outputStream.write(buffer,0,length);
}
outputStream.close();
inputStream.close();
return f;
}catch (IOException e) {
//Logging exception
}
return null;
}
了解更多信息,请参阅以下链接: -
How to pass a file path which is in assets folder to File(String path)?