2015-07-11 67 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

相關問題