我是android的新手,不太了解它。我已将图像导入到我的项目中,当我尝试使用文件检查文件是否存在时。
这是我用过的代码..
existingFileName="res/drawable-ldpi/login.png";
File f= new File(existingFileName);
// Log.d("Image path",);
if(f.exists())
{
Log.d("EXISTS", "====File Exists===");
}
仍然显示我没有图像存在。
提前感谢您的帮助, ABY
答案 0 :(得分:8)
如果您将图像放在可绘制文件夹中,我认为您不能像这样访问它们。试试这个
Drawable image= getResources().getDrawable(R.drawable.<id>);
id将是您的文件名。
答案 1 :(得分:4)
如果您将图像存储在“res / drawable”文件夹中,则可以执行以下操作:
Drawable drawable = getResources().getDrawable(R.drawable.name)
请参阅http://developer.android.com/reference/android/content/res/Resources.html#getDrawable
如果您将图片存储在资源文件夹中,则需要使用getAssets()
(http://developer.android.com/reference/android/content/Context.html#getAssets())
您可以这样做:
InputStream is = getAssets().open(imageName);
BufferedInputStream buf = new BufferedInputStream(is);
Bitmap bitmap = BitmapFactory.decodeStream(buf);
请记住,对于这两种情况,您需要Context
(即Activity
)
答案 2 :(得分:2)
在您阅读之前,no need to check
存在资产文件。 AssetManager takes care of it
。如果文件丢失,则抛出异常。您的编码实践应该始终将该部分代码包含在try catch中并拆分逻辑。不需要额外的代码。如果您尝试打开不存在的文件,则会出现异常。
但是,如果您仍想进行该手动作业,请尝试以下代码。
AssetManager mg = getResources().getAssets();
try {
//do all considering file exists
mg.open(pathInAssets);
} catch (IOException ex) {
//do all in case file is missing
}
如果您的文件位于assets / folder / file.ext,则pathInAssets
将为"folder/file.ext"
答案 3 :(得分:1)
通常,如果使用res / drawable,则会将您的资源标识符编译到R.java文件中。因此,如果您使用那里的标识符,您可以确定文件在那里,否则您无法编译您的项目。
如果您想稍后交换R.java并且真的需要在res / drawable中列出资源,可以使用java Reflection来检查R类,如下所示:
Class<?> c=R.drawable.class;
Field[] fs=c.getFields();
for(Field f: fs)
Log.v("test", f.getName());
然后,您将获得一个没有文件扩展名的资源列表。然后使用int id=f.getInt(null);
读取每个资源的资源标识符(整数)。
答案 4 :(得分:1)
使用eclipse中的DDMS透视图在运行应用程序的模拟器上浏览图像。
答案 5 :(得分:1)
如果您收到此错误..“无法对static
类型的non-static
方法getResources()
进行ContextWrapper
引用”
试试Drawable image=Classname.this.getResources().getDrawable(R.drawable.<id>);
这里Classname.this
表示ClassContext / Application Context。