2015-07-11 68 views
2

我有用于获取图像的loadImage函数。当我试图从getFile()函数中获取文件时,它才起作用。有没有办法使用ClassLoader和getClass()方法从res文件夹中获取文件

public BufferedImage loadImage(String img) { 
    BufferedImage bimg = null; 
    try { 
     bimg = ImageIO.read(new File("res/" + img)); 
    } catch (Exception e1) { 
     try { 
      bimg = ImageIO.read(ClassLoader.getSystemResource("res/" + img)); 
     } catch (Exception e2) { 
      try { 
       bimg = ImageIO.read(getClass().getResource("res/" + img)); 
      } catch (Exception e3) { 
       System.out.println("Cannot load image: " + img); 
      } 
     } 
    } 
    return bimg; 
} 

我曾尝试使用下面的函数尝试:

public File getFile(String file) { 
    File f = null; 
    try { 
     f = new File("res/" + file); 
    } catch (Exception e1) { 
     try { 
      f = new File(ClassLoader.getSystemResource("res/" + file).getFile()); 
     } catch (Exception e2) { 
      try { 
       f = new File(getClass().getResource("res/" + file).getFile()); 
      } catch (Exception e3) { 
       System.out.println("Cannot load File: " + file); 
      } 
     } 
    } 
    return f; 
} 

这些功能都在一个罐子lib和我的其他项目想从罐子LIB文件。

这是在我的项目试图从罐子里的lib

File file = files.getFile("config.cfg"); 

我已经打开了瓶子和检查,如果该文件的jar内部存在的config.cfg获取文件。

+1

可怕异常捕获 – m0skit0

+0

当我把它给了我这个文件的路径:/ C:/用户/ 8803286/Dropbox/Workspace/Eclipse /程序/ Sinx%20Core/build/jar/SinxCore.jar!/res/config.cfg – 8803286

回答

1

您可以使用该类。 getResourceAsStream(String name)。例如,如果你在jar文件中有"/data/config.cfg",那么你就可以打开该文件,使用下面一行写着:

InputStream is = this.getClass().getResourceAsStream("/data/config.cfg"); 
+0

谢谢它的工作 – 8803286

0

这取决于你的包装。请记住,您不必将应用程序打包为jar文件 - 它可以是非打包形式,包含分隔目录中的类(就像在jar文件中但没有它)。

在Java中获取File就像在运行应用程序的操作系统中获取文件一样。所以,如果你有一个“非jar”的表单,那么你的代码就可以正常工作。但是如果你有一个JAR应用程序,那么你的操作系统就必须支持对打包文件的操作(jar实际上就是ZIP压缩文件),就像在非打包文件上一样。但是,我不知道这种情况。总而言之 - 从资源(从您的应用程序的jar文件中获取文件)将不起作用,因为它应该允许本机文件系统执行所有正常文件允许的操作(复制,粘贴,写入,改变属性等)。以流的形式获取资源是独立的事情(并且在任何情况下都可以工作)。

编辑: 根据您的评论,你有一个JAR表格。在这种情况下,从资源获取文件为File根本不起作用。

+0

但是获取图像工作为什么要让文件无法工作? – 8803286

+0

这就是为什么我试着声明如果新的文件()无法获得文件,那么它去下一个 – 8803286

相关问题