设置创建目录的权限以将文件复制到其中

时间:2015-10-19 11:08:55

标签: java file exception permissions directory

在我的程序执行期间,它创建一个包含两个子目录/两个文件夹的目录。在其中一个文件夹中,我需要复制一个Jar-File。我的程序类似于安装例程。复制Jar文件不是问题,而是创建目录的权限 我尝试使用mkdirs()以及File.setWritable(true, false).setExecutable方法设置目录的权限(使用.setReadable方法实际创建它们之前),但访问权限子目录仍然被拒绝。

这里是我的代码的摘录,用于创建两个子目录之一:

folderfile = new File("my/path/to/directory");
folderfile.setExecutable(true, false);
folderfile.setReadable(true, false);
folderfile.setWritable(true, false);
result = folderfile.mkdirs();

if (result) {
    System.out.println("Folder created.");
}else {
    JOptionPane.showMessageDialog(chooser, "Error");
}
File source = new File("src/config/TheJar.jar");
File destination = folderfile;

copyJar(source, destination);

我的" copyJar "方法:

private void copyJar(File source, File dest) throws IOException {

        InputStream is = null;
        OutputStream os = null;
        try {
            is = new FileInputStream(source);
            os = new FileOutputStream(dest);
            byte[] buffer = new byte[1024];
            int length;
            while ((length = is.read(buffer))>0) {
                os.write(buffer, 0, length);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } 
        is.close();
        os.close();

    }

os = new FileOutputStream(dest);,调试器会抛出一个FileNotFoundException,其中包含对目录的访问权限被拒绝的描述。

有没有人知道我做错了什么或有更好的解决方案来通过Java设置权限?提前谢谢!

2 个答案:

答案 0 :(得分:1)

类似的问题被问到有几年了。

Java 7 Unix系统的可能解决方案可在此处找到:How do i programmatically change file permissions?

或者,在最佳响应之下,使用JNA的例子。

我希望那会对你有帮助!

答案 1 :(得分:0)

我解决了这个问题。最终,它比预期的要容易得多。

主要问题不是权限问题,而是ref。分配给FileNotFoundException的文件实际上不是文件,而只是一个目录,以便Stream无法找到它。您必须在初始化OutputStream之前创建文件,然后将源文件复制到新创建的文件中。代码:

OutputStream