在我的程序执行期间,它创建一个包含两个子目录/两个文件夹的目录。在其中一个文件夹中,我需要复制一个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设置权限?提前谢谢!
答案 0 :(得分:1)
类似的问题被问到有几年了。
Java 7 和 Unix系统的可能解决方案可在此处找到:How do i programmatically change file permissions?
或者,在最佳响应之下,使用JNA的例子。
我希望那会对你有帮助!
答案 1 :(得分:0)
我解决了这个问题。最终,它比预期的要容易得多。
主要问题不是权限问题,而是ref
。分配给FileNotFoundException
的文件实际上不是文件,而只是一个目录,以便Stream无法找到它。您必须在初始化OutputStream
之前创建文件,然后将源文件复制到新创建的文件中。代码:
OutputStream