2015-10-30 43 views
0

这段代码的想法是接收一些java文件,这些文件扩展了服务器上的另一个java文件。classloader上的java.lang.ClassNotFoundException

在这一刻,我忽略了明显的安全问题,但非少的代码如下:

private boolean isTheFileIamLookingFor(String name,String path,String nameOfFatherClass) { 
     System.out.println("NAME IS "+name); //prints correct class name 
     System.out.println("PATH IS "+path); //prints correct path 
     if(Files.getFileExtension(path).equals("class")) 
     { 
      try { 
       ClassLoader classLoader = this.getClass().getClassLoader(); 
       Class<?> loadedMyClass = classLoader.loadClass(String.format("%s.class", name)); 
       Class<?> c[] = loadedMyClass.getInterfaces(); 
       if(Arrays.asList(c).contains(Class.forName(nameOfFatherClass))) 
       { 
        return true; 
       } 
      } catch (ClassNotFoundException e) { 
       e.printStackTrace(); 
      } 
     } 
     return false; 

    } 

但我得到的错误

抛出java.lang.ClassNotFoundException :MyClass.class

但事实是该文件在那里。 关于为什么没有找到类的任何说法?

cmd log

回答

1

import java.util.Arrays; import org.apache.commons.io.FilenameUtils;

公共类mytest的{

public static void main(String[] args) { 
    mytest m = new mytest(); 
    System.out.println(m.isTheFileIamLookingFor("ArrayList", "java.util.", 
      "List")); 
} 

public boolean isTheFileIamLookingFor(String name, String path, 
     String nameOfFatherClass) { 
    System.out.println("NAME IS " + name); // prints correct class name 
    System.out.println("PATH IS " + path); // prints correct path 
    if (!FilenameUtils.getExtension(path).equals("class")) 

    { 
     try { 
      ClassLoader classLoader = this.getClass().getClassLoader(); 
      System.out.println(String.format("%s.class", name)); 
      Class<?> loadedMyClass = classLoader.loadClass(path + name); 
      Class<?> c[] = loadedMyClass.getInterfaces(); 
      if (Arrays.asList(c).contains(
        Class.forName(path + nameOfFatherClass))) { 
       return true; 
      } 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
    return false; 

} 

}

+0

所以路径应该是这样 “my.package.folder。”和名称没有扩展名? nameOfFatherClass和name都应该有.class文件?它似乎如此接近,但问题仍然存在 –

+0

是的,非常感谢! –

+0

你还有问题Artur吗? – RamPrakash

相关问题