2014-01-21 16 views
1

我一直在尋找這個論壇和許多其他資源來嘗試獲得我的Java難題的答案,但無濟於事,我不能使用Apache公共資源。將文件放在文件夾中的Java方法(作爲參數)

我試圖將文件放入特定的文件夾中;

public void createRepositoryDir(String pRepositoryName) 
    { 
     File repositoryDir = new File(pRepositoryName); 
     repositoryDir.mkdir(); 
    } 

使用JFileChooser中選擇並返回一個文件對象的文件,但我發現很難把那個文件放到目錄(repositoryDir.mkdir();):該文件夾使用.mkdir()已創建。

我需要傳遞目錄位置和文件位置作爲參數,因爲我使用的是基於菜單的系統。

我已經嘗試:

File file = new File(dir, pFile); 

但同樣它似乎是文件和字符串類型之間的衝突。

任何建議將不勝感激!

+2

你說的*衝突意思文件和字符串類型*之間?你有沒有編譯錯誤? – A4L

+0

爲了澄清一下,假設您是否安全:使用JFileChooser選擇一個現有文件,然後想要將該文件從其現有位置移動到新目錄中? – Jason

+1

文件對象不代表文件的內容,它們只代表文件的名稱和位置。您只能通過操作File對象來移動物理文件。您將需要將源文件的內容複製到目標文件(然後可以選擇刪除源文件)。 – Jason

回答

0

假設pFile是源文件和dir是你的目標目錄,您需要創建一個新的目標文件:

File targetFile = new File(dir, pFile.getName()); 

然後,您需要將pFile的內容複製到targetFile。你可以這樣做很多不同的方式,但是這裏是一個(異常處理已經爲清晰起見,省略):

FileInputStream fis = new FileInputStream(pFile); 
FileOutputStream fos = new FileOutputStream(targetFile); 
copyStream(fis, fos, 10000); 
fos.flush(); 
fos.close(); 
fis.close(); 

凡copyStream方法定義爲:

public static void copyStream(final InputStream inputStream, final OutputStream outputStream, final int bufferLength) throws IOException { 
    // copy the input stream to the output stream 
    byte[] buf = new byte[bufferLength]; 
    int len; 
    while ((len = inputStream.read(buf)) > 0) { 
     outputStream.write(buf, 0, len); 
    } 
} 
+0

謝謝傑森代碼準確地描述了它,謝謝你,非常感謝! – Simon

+0

不要忘記關閉輸入流,然後刷新並關閉輸出流。見上面編輯。 – Jason

+0

謝謝Jason會這麼做。 – Simon

0

僅創建新文件將不起作用。

如果您可以使用Java 1.7,則可以安心使用:請參閱Files類。

然而它採用了新的java.nio.Path而不是java.io.File的,所以你必須創建Path對象:

FileSystem fs = FileSystems.getDefault(); 
Path p = fs.getPath("C:/Windows/"); 
相關問題