您的位置:首页 > 移动开发 > Android开发

Android中由文件名获取文件Id的两种方法

2013-05-07 09:30 387 查看
在android中,我们经常使用资源文件的id来代替这个资源,如 R.drawable.*** ,

那怎样通过文件名得到这个资源的Id的,这里介绍两种方法:

一:通过 getIdentifier (String name, String defType, String defPackage)方法。

这里有两种实现

1.name 用package:type/entry,那么后面两个参数可以为null.

2.name只写文件名(不要加后缀),后面两参数分别为文件类型和包路径。

二:通过反射机制:

给个demo: drawable文件夹中有一bluetooth.png图片

import java.lang.reflect.Field;

import android.app.Activity;

import android.os.Bundle;

public class GetResIdActivity extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//方式一:

int resId1 = getResources().getIdentifier("bluetooth", "drawable", "com.shao.acts");

if(R.drawable.bluetooth==resId1){

System.out.println("TRUE");

}

//方式二:

int resId2 = getResources().getIdentifier("com.shao.acts:drawable/bluetooth", null, null);

if(R.drawable.bluetooth==resId2){

System.out.println("TRUE");

}

//方式三:

int resId3 = getImage("bluetooth");

if(R.drawable.bluetooth==resId3){

System.out.println("TRUE");

}

}

public static int getImage(String pic) {

if(pic==null||pic.trim().equals("")){

return R.drawable.icon;

}

Class draw = R.drawable.class;

try {

Field field = draw.getDeclaredField(pic);

return field.getInt(pic);

} catch (SecurityException e) {

return R.drawable.icon;

} catch (NoSuchFieldException e) {

return R.drawable.icon;

} catch (IllegalArgumentException e) {

return R.drawable.icon;

} catch (IllegalAccessException e) {

return R.drawable.icon;

}

}

}

**************************************************************************************************

public class LocalImageManager
{

private static LocalImageManager INSTANCE = null;

private HashMap<String, String> map = new HashMap<String, String>();

private LocalImageManager(){

initData();

}

public synchronized static LocalImageManager getInstance(){

if(INSTANCE == null){

INSTANCE = new LocalImageManager();

}

return INSTANCE;

}

private void initData(){

map.clear();

// 存放url对应的文件名(不能带有后缀)

map.put("http://www.baidu.com/a1.png", "a1");

map.put("http://www.baidu.com/a2.png", "a2");

map.put("http://www.baidu.com/a3.png", "a3");

map.put("http://www.baidu.com/a4.png", "a4");

}

/**

* 根据url获取本地的图片

* @param context 上下文

* @param url 图片url

* @return 本地图片资源id

*/

public int getLocalImageByURL(Context context,String url) {

int resId = 0;

String picName = map.get(url);

resId = context.getResources().getIdentifier(

picName == null ? "no_picture" : picName, "drawable",context.getPackageName());

return resId;

}

}

***************************************************************************************

java 解析properties文件的两种方法
http://blog.csdn.net/huangyunzeng2008/article/details/5940808
测试用:config.properties

name=huangyz

password=huangyz@neusoft.com

package parse;

import java.util.*;

import java.io.*;

public class ParseProperties {

public static void main(String args[]) {

// 生成文件对象

File pf = new File(System.getProperty("user.dir")

+ "/src/config/config.properties");

// 生成文件输入流

FileInputStream inpf = null;

try {

inpf = new FileInputStream(pf);

} catch (Exception e) {

e.printStackTrace();

}

// 生成properties对象

Properties p = new Properties();

try {

p.load(inpf);

} catch (Exception e) {

e.printStackTrace();

}

// 输出properties文件的内容

System.out.println("name:" + p.getProperty("name"));

System.out.println("password:" + p.getProperty("password"));

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: