我有一個程序,有3個用於從特定來源文件夾加載圖像的方法。第一個加載一個給定直接路徑的圖像。第二個加載文件夾中的所有圖像並將它們存儲在ArrayList中。第三個加載文件夾內所有文件夾的所有圖像。 (見下面的代碼)導出到.jar時從源文件夾加載多個圖像
當我導出到.jar時,第一種方法工作正常。其他兩種方法失敗。 據我瞭解,它不工作,因爲你不能在.jar文件。
因此,代碼在這裏第一次失敗:
File dir = new File(LoadImages.class.getResource("/" + directory).getFile());
我想過用的FileInputStream代替,但我想不出向流分成幾部分,這樣我可以分配圖像。
唯一的工作,我身邊能想到至今
public static ArrayList<BufferedImage> loadImageFolder(String directory) {
ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
int i = 0;
while (true) {
try {
BufferedImage img = ImageIO.read(LoadImages.class.getResource("/" + directory + "[" + i + "].png"));
images.add(img);
i++;
} catch (Exception e) {
break;
}
}
return images;
}
但迫使你以某種模式命名您的文件。這是可能的,因爲您可以在導出之前更改文件名稱,但我想知道是否有沒有這樣的方法。
在此先感謝。
下面的工作方法導出前
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.FileFilter;
import java.io.IOException;
import java.util.ArrayList;
import javax.imageio.ImageIO;
public class LoadImages {
static String extensions = "png";
static FilenameFilter imageFilter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (name.endsWith("." + extensions)) {
return true;
}
return false;
}
};
static FileFilter folderFilter = new FileFilter() {
@Override
public boolean accept(File f) {
if (f.isDirectory()) {
return true;
}
return false;
}
};
public static BufferedImage loadImage(String imageFile) {
BufferedImage img = null;
try {
img = ImageIO.read(LoadImages.class.getResource("/" + imageFile));
} catch (IOException e) {
e.printStackTrace();
}
return img;
}
public static ArrayList<BufferedImage> loadImageFolder(String directory) throws IOException {
File dir = new File(LoadImages.class.getResource("/" + directory).getFile());
ArrayList<BufferedImage> images = new ArrayList<BufferedImage>();
if (dir.isDirectory()) {
for (File f : dir.listFiles(imageFilter)) {
BufferedImage img = null;
try {
img = ImageIO.read(f);
images.add(img);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static ArrayList<ArrayList<BufferedImage>> loadImageFoldersInFolder(String directory) {
File dir = new File(LoadImages.class.getResource("/" + directory).getFile());
ArrayList<ArrayList<BufferedImage>> folders = new ArrayList<ArrayList<BufferedImage>>();
if (dir.isDirectory()) {
ArrayList<BufferedImage> imagesHere = new ArrayList<BufferedImage>();
for (File f : dir.listFiles(imageFilter)) {
BufferedImage img = null;
try {
img = ImageIO.read(f);
imagesHere.add(img);
} catch (IOException e) {
e.printStackTrace();
}
}
folders.add(imagesHere);
for (File f : dir.listFiles(folderFilter)) {
ArrayList<BufferedImage> folder = new ArrayList<BufferedImage>();
for (File x : f.listFiles(imageFilter)) {
BufferedImage img = null;
try {
img = ImageIO.read(x);
folder.add(img);
} catch (IOException e) {
e.printStackTrace();
}
}
folders.add(folder);
}
}
return folders;
}
}
請參閱:http://stackoverflow.com/questions/11012819/how-can-i-get-a-resource-folder-from-inside-my-jar-file – Zire