如何动态地在jar中添加图像?它甚至可能吗?
在我的swing项目中,我让用户使用user_image
选择他的JFileChooser
。现在我无法使用数据库。所以我想如果我可以在jar中添加上传的图像然后获取它。它应该是一种有效的方式吗?或者其他任何想法吗?如何有效地保存图像,以便我的swing应用程序可以访问它。图像数量不固定,因为多个用户使用相同的jar文件在同一台计算机上上传图像。
答案 0 :(得分:0)
我建议你有一个应用程序目录,你的应用程序正在从中读取图像并使用Preference-API配置此目录
答案 1 :(得分:0)
我不确定jar中存储动态数据是个好主意。如果您创建动态本地应用程序,则可以使用一些工作目录。或者,您可以使用http连接来使用远程图像存储。或者您可以使用 DB 。
或者您开发类似灵活界面的内容,例如:
public interface ImageProvider {
public void storeImage(MyImageClass image, String imageLable);
public MyImageClass getImage(String imageLable);
}
只要您的应用程序正在开发,就按类实现:
public class ImageJarProvider implements ImageProvider { // jar solution
private File jar = null;
public ImageJarProvider(File jar) {
this.jar = jar;
}
public void storeImage(MyImageClass image, String imageLable) {
// implement jar repack:
// use classes JarFile, ZipEntry and ZipOutputStream.
// unpack file
JarFile jarFile = new JarFile(jar);
ZipEntry inputEntry = jarFile.getEntry("path/you/need/to/file");
File outFile = new File("temp.jar");
FileOutputStream zipFileStream = new FileOutputStream(outfile);
ZipOutputStream zipOutStream = new ZipOutputStream(new BufferedOutputStream(zipFileStream));
ZipEntry entry = new ZipEntry("filename you pack");
zipOutStream.putNextEntry(entry);
//pack all your files and pack new image.
//this code just shows how to unpack and pack zip(jar)-archives.
BufferedInputStream origin = new BufferedInputStream(new jarFile.getInputStream(inputEntry));
byte data[] = new byte[2048];
int count = 0;
while((count = origin.read(data, 0, data.length)) != -1) {
zipOutStream.write(data, 0, count);
}
zipOutStream.close();
origin.close();
}
public MyImageClass getImage(String imageLable) {
// implement unpack of image
...
}
}
public class ImageHttpProvider implements ImageProvider { // http solution
public ImageHttpProvider(String host, int port) {
...
}
public void storeImage(MyImageClass image, String imageLable) {
// implement image upload
...
}
public MyImageClass getImage(String imageLable) {
// implement HTTP image download
...
}
}
public class ImageDirProvider implements ImageProvider { // working directory solution
public ImageDirProvider(File dir) {
...
}
public void storeImage(MyImageClass image, String imageLable) {
// implement file work
...
}
public MyImageClass getImage(String imageLable) {
// implement file work
...
}
}
public class ImageDBProvider implements ImageProvider { // DB solution
public ImageDBProvider(String jdbcURL, Properties jdbcProperties) {
...
}
public void storeImage(MyImageClass image, String imageLable) {
// implement jdbc clob
...
}
public MyImageClass getImage(String imageLable) {
// implement jdbc clob
...
}
}
您可以根据需要组织存储和阅读图像,而无需更改应用程序的引擎。