2015-10-19 74 views
0

在執行我的程序期間,它創建一個包含兩個子目錄/兩個文件夾的目錄。進入這些文件夾中的一個,我需要複製一個Jar文件。我的程序類似於安裝例程。 Jar文件的複製不是這裏的問題,而是創建的目錄的權限。
我試圖用File.setWritable(true, false)以及.setExecutable.setReadable方法設置目錄的權限(實際上在創建它們之前用mkdirs()方法),但是仍然拒絕對子目錄的訪問。設置創建目錄的權限以將文件複製到其中

這裏是我的代碼爲創建兩個子目錄之一的摘錄:

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設置權限?提前致謝!

+1

你檢查了文件系統什麼是你的不同目錄的權限和所有者? –

+0

@Gaël是的,它們都具有隻讀權限,儘管我通過Java將它們設置爲可寫。我確信我在創建目錄 –

+0

時出錯,您應該嘗試布爾結果= folderfile.setWritable(真假); System.out.println(result)... –

回答

1

有一個類似的問題被問到有幾年。

Java 7的Unix系統中一個可能的解決方案,請訪問:How do i programmatically change file permissions?

或者,下面的最好的迴應,與JNA一個例子。

我希望那能幫助你!

+0

嗨,謝謝你的回答。我已經用setPosixFilePermission()試過了,但我感覺所有這些方法只對文件有效,對目錄不起作用,因爲它對目錄權限沒有影響......或者你必須這樣做以某種方式以不同的方式 –

0

我解決了這個問題。最後,解決問題比預期的要容易得多。

主要問題不是權限問題,而是FileNotFoundException。分配給OutputStream的文件不是真的文件,而只是一個目錄,因此Stream無法找到它。您必須在初始化OutputStream之前創建文件,然後將源文件複製到新創建的文件中。代碼:

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

     InputStream is = null; 
     File dest2 = new File(dest+"/TheJar.jar"); 
     dest2.createNewFile(); 
     OutputStream os = null; 
     try { 
      is = new FileInputStream(source); 
      os = new FileOutputStream(dest2); 
      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(); 

    } 
相關問題