我正在尝试使用NetBeans在Java中创建一个混乱管理应用程序。我想将成员的图像保存在我的src
目录内的指定文件夹中。我刚刚创建了一个名为EmpImgs的文件夹,用于存储员工图像。下面是我的代码:
File srcDir = new File(file); // current path of image
File dstDir = new File("src\J_Mess_Mgnt\EmpImgs\"+Txt_C_G_M_M_ID.getText());
objm.copyFile(srcDir, dstDir);` // copy image from srcDir to dstDir
这里我使用另一个类将图像复制到预定义的文件夹中,并根据它们的ID重命名图像。
Java IDE中一切正常。
但不幸的是,在生成可执行的.jar文件之后,这段代码将无法工作。我无法保存或访问该目录下的任何图像文件。我刚刚浏览了这个网站,但是我没有找到合适的答案。
所有我需要的是保存和编辑图像在jar文件夹
嘿,嗨,伙计,你需要帮助。这是一个重复的,但我会放你一马,也许你以后应该删除它。因此,回到基础,jvm运行字节代码,这是您从编译java源代码到.class文件中获得的。这与C和c++不同,如果你只得到一个。exe。你不希望在所有文件夹中给用户一堆.class文件,他们可以编辑这些文件,并且必须在命令行上运行命令,而是给他们一个所谓的"存档",这只是一个不可变的文件结构,这样他们就不会搞砸应用程序,在java中被称为jar。他们只需双击归档文件(这是一个jar), jvm就会调用MetaInf目录中指定的main方法(只是关于jar的一些信息,与其他编程语言中的清单相同)。
现在请记住您的应用程序现在是一个jar!它是不可改变的!原因我已经解释过了你不能在那里保存任何数据!您的程序仍然可以在命令行和ide中工作,因为它的工作方式就好像您使用的应用程序是作为带有.class文件的一堆文件夹分发的,并且您可以写入此位置。
如果你想在应用程序中打包资源,你需要使用streams (google一下)。但请记住!这样你就不能在jar中保存更多的资源了!你得去别的地方写!也许可以使用user。主目录!或者从类路径指定的位置,照片将在罐子旁边!有时您可能需要java应用程序的安装程序,但如果不需要,通常不希望创建额外的工作。
我终于找到了适合我问题的答案。不可能将映像或文件复制到执行jar文件夹。所以我用了一个不同的想法。创建一些文件夹(根据我们的要求),我的可执行jar文件夹所在的位置(无论哪个驱动器或位置在哪里)。代码是…
String PRJT_PATH=""; //variable to store path of working directory.
private void getdire() throws IOException{
File f=new File(".");
File[] f1=f.listFiles();
PRJT_PATH=f.getCanonicalPath(); //get path details.for eg:-E:/java/dist
}
private void new_Doc_folder(){ //function for creating new folders
try{
String strManyDirectories="Docs"+File.separator+"Bil_Img"; //i need to create 2 folders,1st a folder namedDocs and In Docs folder another folder named Bil_Img
String SubDirectories="Docs"+File.separator+"EmpImgs"; //same as above but keep in mind that It will not create a Same folder again if already exists,
// Create one directory
boolean success = (new File(strManyDirectories)).mkdirs(); //create more than one directory
boolean success1 = (new File(SubDirectories)).mkdir(); //Creates a single directory
if (success && success1) {
}
}catch (Exception e){//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
It works Successfully.
登记