1首先,把你指定的包,转换成本地路径
2列出本地路径下的所有类,并把class去掉,再拼接上 包名
3根据上面获取的类的全限定名,依次利用ClassforName(StringName)newInstance()来创建实例
4把创建好的实例添加到集合中。
Code:
/
根据包名来获取此包下所有的类名及其实例
@param packName
@return
/
public static Set<Object> getObjectsInPackage(String packName){
Set<Object> objs = new HashSet<Object>();
String packageName = packName;
String packageDirName = packageNamereplace("", "/");
Enumeration<URL> dirs = null;
try {
dirs = ThreadcurrentThread()getContextClassLoader()getResources(packageDirName);
//迭代此 Enumeration
while(dirshasMoreElements()){
URL url = dirsnextElement();
File file = new File(urlgetFile());
//把此目录下的所有文件列出
String[] classes = filelist();
//循环此数组,并把class去掉
for(String className : classes){
className = classNamesubstring(0,classNamelength()-6);
//拼接上包名,变成全限定名
String qName = packageName+""+className;
//如有需要,把每个类生实一个实例
Object obj = ClassforName(qName)newInstance();
//添加到集合中
objsadd(obj);
}
}
} catch (Exception e) {
eprintStackTrace();
}
return objs;
}
先判断类型是否是list,然后用下面的代码就可以获取到list集合
Java code
Method m = (Method) objgetClass()getMethod("get" + getMethodName(fieldgetName())); List list = (List) minvoke(obj);
Java codeprivate static String getMethodName(String fildeName) throws Exception{ byte[] items = fildeNamegetBytes(); items[0] = (byte) ((char) items[0] - 'a' + 'A'); return new String(items); }
要求1中要去掉所有数字,要求2、3中又要保留数字并进行翻译,所以我两种都写了。具体代码为:
public class Test {
public static void main(String args[]) {
String str = "0as2sw$#3Six";
Systemoutprintln("原字符串:[" + str + "]");
Systemoutprintln("");
//不翻译数字
Set<String> set1 = new LinkedHashSet<>();
for (String s : strsplit("[^A-Z a-z]")) {
if (slength() > 0) {
set1add(s);
}
}
Systemoutprintln("不翻译数字的结果:" + set1);
Systemoutprintln("");
/因为又要去除非字母和数字(以下简称去杂),又要将去杂结果分离成数字和字母,再翻译数字,整个流程挺麻烦的,索性在去杂之前,先将数字翻译成英文,为了使数字翻译后的英文和原字符串的字母分开,在数字左右添加占位符#,这样的话,形如:[a1b2c3]就会被处理为:[a#one#b#two#c#three#],这样去杂后,就会被分割为:[a,one,b,two,c,three]了。这里定义了枚举值English,用于实现0-9的英文映射,[10]不好映射成[ten],现在只能映射为[one,zero],如果按照题干非要映射为ten的话你再考虑考虑吧/
for (English english : Englishvalues()) {
str = strreplaceAll(englishgetNum() + "", "#" + englishname() + "#");
}
Systemoutprintln("将数字替换为“占位符 + 英文 + 占位符”的中间结果:[" + str + "]");
Systemoutprintln("");
//翻译数字的结果
Set<String> set2 = new LinkedHashSet<>();
for (String s : strsplit("[^A-Za-z]")) {
if (slength() > 0 ) {
//判断当前字符串是否是数字的英文,如果不是,就把它拆成单字母
if (mappingEnglish(s)){
set2add(s);
}else {
for (char c : stoCharArray()) {
set2add(StringvalueOf(c));
}
}
}
}
Systemoutprintln("翻译数字的结果:" + set2);
}
//判断当前字符串是否是数字的英文
private static boolean mappingEnglish(String str) {
for (English english : Englishvalues()) {
str = strtoLowerCase();
if (englishname()equals(str)) {
return true;
}
}
return false;
}
enum English {
zero(0),
one(1),
two(2),
three(3),
four(4),
five(5),
six(6),
seven(7),
eight(8),
nine(9);
private int num;
public int getNum() {
return num;
}
English(int num) {
thisnum = num;
}
}
}
我怕发出来代码又挤在一起,顺便也截个图:
8-21行
22-50行
51-61行
62-85行完
运行结果:
分类: 电子数码 >> 其他数码产品
问题描述:
我在eclipse中调试没有任何问题,现在打成jar包后运行出现错误。原因就是我在程序中使用了一些(在工程目录下的gaiji目录下),打成jar包后它好像是在包中找这些资源,我现在要作成这个样子:就是和jar文件同一目录下有一个目录gaiji,执行这个jar调用gaiji目录下的那些,这个路径该怎么设置呢。我现在的路径是用URL imgURL = getClass()getResource("/gaiji" + gaiji1FILENAME);ImageIcon icon = new ImageIcon(imgURL);Image img = icongetImage();
解析:
在java中,经常要定位某些文件的位置,为了能让程序与物理位置无关,就要使用相对路径。但java中使用相对路径总会遇到一些很麻烦的问题,就是到底相对于哪个参照物的问题。因为我们平时使用相对路径总是相对当前工作目录而言的,但有时需求并非如此。比如,要在一个开发包中使用相对路径,却不知道开发包被其他程序调用时的所在路径,而且特别是在web应用中,很难确定某个文件在整个应用中的相对路径。
所以使用相对路径最好的办法就是让路径相对的参照物是我的开发包或我的应用本身的东西,最好的就是用我开发包中的类的class文件。只要知道了某个class文件的绝对路径,就可以以它为参照物,使用相对路径来定位其他任何文件了。
为了实现这个想法,我写了这个Path类,这个类提供了两个静态公共方法,一个用来定位类的class文件的位置,另一个以某个类为参照物来定位一个相对路径。使用这两个方法,我们可以完全不必理会应用的当前工作路径,随心所欲的根据自己的位置来寻找任何文件。比如在编写某个功能性开发包时,就可以完全不用管调用这个开发包的应用的路径情况,而仅仅根据开发包本身的位置来定位文件,这样很好的实现了封装性,将文件的路径处理完全封闭在了开发包自身之内。
以下是Path类的源代码:
创建日期 2004-11-22
更改所生成文件模板为
窗口 > 首选项 > Java > 代码生成 > 代码和注释
/
package mytools;
import javaioFile;
import javaioIOException;
import javaMalformedURLException;
import javaURL;
import javasecurityCodeSource;
import javasecurityProtectionDomain;
/
@author 由月
这个类提供了一些根据类的class文件位置来定位的方法。
/
public class Path {
/
获取一个类的class文件所在的绝对路径。 这个类可以是JDK自身的类,也可以是用户自定义的类,或者是第三方开发包里的类。
只要是在本程序中可以被加载的类,都可以定位到它的class文件的绝对路径。
@param cls
一个对象的Class属性
@return 这个类的class文件位置的绝对路径。 如果没有这个类的定义,则返回null。
/
public static String getPathFromClass(Class cls) throws IOException {
String path = null;
if (cls == null) {
throw new NullPointerException();
}
URL url = getClassLocationURL(cls);
if (url != null) {
path = urlgetPath();
if ("jar"equalsIgnoreCase(urlgetProtocol())) {
try {
path = new URL(path)getPath();
} catch (MalformedURLException e) {
}
int location = pathindexOf("!/");
if (location != -1) {
path = pathsubstring(0, location);
}
}
File file = new File(path);
path = filegetCanonicalPath();
}
return path;
}
/
这个方法可以通过与某个类的class文件的相对路径来获取文件或目录的绝对路径。 通常在程序中很难定位某个相对路径,特别是在B/S应用中。
通过这个方法,我们可以根据我们程序自身的类文件的位置来定位某个相对路径。
比如:某个txt文件相对于程序的Test类文件的路径是//resource/testtxt,
那么使用本方法PathgetFullPathRelateClass("//resource/testtxt",Testclass)
得到的结果是txt文件的在系统中的绝对路径。
@param relatedPath
相对路径
@param cls
用来定位的类
@return 相对路径所对应的绝对路径
@throws IOException
因为本方法将查询文件系统,所以可能抛出IO异常
/
public static String getFullPathRelateClass(String relatedPath, Class cls)
throws IOException {
String path = null;
if (relatedPath == null) {
throw new NullPointerException();
}
String clsPath = getPathFromClass(cls);
File clsFile = new File(clsPath);
String tempPath = clsFilegetParent() + Fileseparator + relatedPath;
File file = new File(tempPath);
path = filegetCanonicalPath();
return path;
}
/
获取类的class文件位置的URL。这个方法是本类最基础的方法,供其它方法调用。
/
private static URL getClassLocationURL(final Class cls) {
if (cls == null)
throw new IllegalArgumentException("null input: cls");
URL result = null;
final String clsAsResource = clsgetName()replace('', '/')concat(
"class");
final ProtectionDomain pd = clsgetProtectionDomain();
javalangClass contract does not specify
if 'pd' can ever be null;
it is not the case for Sun's implementations,
but guard against null
just in case:
if (pd != null) {
final CodeSource cs = pdgetCodeSource();
'cs' can be null depending on
the classloader behavior:
if (cs != null)
result = csgetLocation();
if (result != null) {
Convert a code source location into
a full class file location
for some mon cases:
if ("file"equals(resultgetProtocol())) {
try {
if (resulttoExternalForm()endsWith("jar")
|| resulttoExternalForm()endsWith("zip"))
result = new URL("jar:"concat(
resulttoExternalForm())concat("!/")
concat(clsAsResource));
else if (new File(resultgetFile())isDirectory())
result = new URL(result, clsAsResource);
} catch (MalformedURLException ignore) {
}
}
}
}
if (result == null) {
Try to find 'cls' definition as a resource;
this is not
document.d to be legal, but Sun's
implementations seem to allow this:
final ClassLoader clsLoader = clsgetClassLoader();
result = clsLoader != null clsLoadergetResource(clsAsResource)
: ClassLoadergetSystemResource(clsAsResource);
}
return result;
}
public static void main(String[] args) {
try {
Systemoutprintln(getPathFromClass(Pathclass));
Systemoutprintln(getFullPathRelateClass("/", Pathclass));
} catch (Exception e) {
eprintStackTrace();
}
}
}
程序运行结果:
C:\java\>java Path
C:\java\\Pathclass
C:\
我怀疑他是到达这个页面以后过一段是件又发送一个ajax请求,才把获取的数据内容根据元素id填充到页面,所以你程序访问这个页面只能得到他空的没有数的页面,你可能需要找找他获取数据请求的url找到了,他实际请求的是"aspxm=11111111111&output=json&callback=querycallback×tamp=1412826381489"这个地址,把m后面换成你要查的号码就可以了返回值为querycallback({"Mobile":"11111111111","QueryResult":"True","TO":"中国联通","Corp":"中国联通","Province":"北京","City":"北京","AreaCode":"010","PostCode":"100000","VNO":"","Card":""});我用自己手机号测的,可以
以上就是关于java 获取指定包下类的实例(100分)全部的内容,包括:java 获取指定包下类的实例(100分)、java反射如何获取并修改list子对象、java中根据一段字符串,获取其中的字母,有要求;求个具体代码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)