在Java中设置文件权限5

我正在使用下面的代码来上传图片。 问题是,上传图像后,我不能改变文件的权限。 我默认设置的文件权限rw-r--r--0644 )。 是否可以更改文件权限或默认设置为0777 ? 它在我的本地系统中工作正常。 但不能改变我的Linux服务器的权限。

  <% try { int filesize=0; String fieldname="",fieldvalue="",filename="",content="",bookid="",bkdescription=""; try { List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request); for (FileItem item : items) { if (item.isFormField()) { fieldname = item.getFieldName(); fieldvalue = item.getString(); if(fieldname.equals("homeid")){ bookid=fieldvalue; } if(fieldname.equals("bkdescription")){ bkdescription=fieldvalue; } } else { try{ fieldname = item.getFieldName(); filename = FilenameUtils.getName(item.getName()); InputStream filecontent = item.getInputStream(); filesize=(int)item.getSize(); filename="literal_"+bookid+".jpg"; if(filesize>0){ byte[] b=new byte[filesize]; int c=0; File f=new File(getServletConfig().getServletContext().getRealPath("/")+"/imagesX"); String filePah=getServletConfig().getServletContext().getRealPath("/")+"/imagesX"; if(f.isDirectory()) { String fl[]=f.list(); for(int i=0;i<fl.length;i++) { File fd=new File(getServletConfig().getServletContext().getRealPath("/")+"/imagesX/"+fl[i]); if(fd.getName().equals(filename)) fd.delete(); } } if(!f.exists()) { new File(filePah).mkdir(); f.mkdir() } java.io.FileOutputStream fout=new java.io.FileOutputStream(getServletConfig().getServletContext().getRealPath("/")+"/imagesX/"+filename); while((c = filecontent.read(b)) != -1 ) { fout.write(b, 0, c); } fout.close(); filecontent.close(); } }catch (Exception e) { System.out.println("Exception in creation of file :"+e); } } } } catch (FileUploadException e) { throw new ServletException("Cannot parse multipart request.", e); } } catch(Exception exp) { out.println(exp); } %> 

您不能从Java代码内部更改文件权限。

新文件系统的默认umask设置为0644 。 改变默认的umask并不是个好主意。

你需要做的就是将目录权限设置为0777 ,然后重新定义你的目录的ACL为递归的,这样所有在里面创建的新文件将继承相同的权限。

下面的链接显示如何去 – https://superuser.com/questions/151911/how-to-make-new-file-permission-inherit-from-the-parent-directory

另一种解决方案是使用系统命令chmod从外部更改权限。

例:

 public static void runCmd (String[] cmd) { try { Process p = Runtime.getRuntime().exec(cmd); BufferedReader r = new BufferedReader( new InputStreamReader ( p.getInputStream() ) ); } catch(Exception e) { } } runCmd(new String[] { "/bin/chmod", "755", "/path/to/your/script" }); 

PS你还试图从一个Oracle数据库中的存储过程调用Java?