У меня есть программа с тремя методами, которые используются для загрузки изображений из определенных источников. Первый загружает одно изображение, заданное прямым путем. Второй загружает все изображения из папки и сохраняет их в ArrayList. И третий загружает все изображения из всех папок в папке. (см. код ниже)Загрузка нескольких изображений из исходной папки при экспорте в .jar
Когда я экспортирую в .jar, первые методы работают нормально. Другие 2 метода не работают. Насколько я понимаю, это не работает, потому что у вас не может быть файлов в .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