问题描述
我正在尝试使用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文件夹中保存和编辑图像
1楼
嘿嘿,您需要帮忙。 这是重复的,但我会为您节省一些时间,也许您以后应该删除它。 回到基础,jvm运行字节码,您可以从将Java源代码编译为.class文件中获得字节码。 现在,这与C和C ++有所不同,只是您得到一个.exe。 您不想在所有这些文件夹中为用户提供一堆.class文件,他们可以编辑这些文件,而必须在命令行上运行命令,而是给他们提供所谓的“存档”,这是一个不可或缺的东西。文件结构,使它们无法破坏应用程序,在Java中称为jar。 他们只需双击存档文件(它是一个jar),jvm就会调用MetaInf目录中指定的main方法(只是有关jar的一些信息,与其他编程语言中的清单相同)。
现在记住您的应用程序现在是一个罐子! 这是一成不变的! 我所解释的原因。 您无法再将数据保存在那里! 您的程序仍将在命令行和IDE中运行,因为它的工作方式就像您使用的应用程序一样,被分发为带有.class文件的一堆文件夹,您可以写入此位置。
如果要使用应用程序打包资源,则需要使用流(将其谷歌搜索)。 但要记住! 然后您就无法将更多资源保存到jar中! 您需要在其他地方写! 也许使用user.home目录! 或从课程路径指定的位置,照片将直接放在罐子旁边! 有时,您可能需要Java应用程序的安装程序,但通常您不需要创建额外的工作。
2楼
最后我找到了我的问题的答案。无法将图像或文件复制到执行jar文件夹。所以我使用了一个不同的Idea。创建一些文件夹(根据我们的要求),将我的可执行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());
}
它成功运行。
Regds