簡體   English   中英

使用 Files.copy 時出現 FileAlreadyExistsException

[英]FileAlreadyExistsException when using Files.copy

我正在嘗試將文件從InputStream復制到本地目錄中。 我創建了一個名為 test 的本地目錄,它位於我的 package 根目錄中。

public void copyFileFromInputStream(InputStream is) {
    Path to = Paths.get("test");
    Files.copy(is, to);
}

顯然我誤解了Files.copy(...) ,因為它似乎正在嘗試創建一個名為“test”的新文件,而不是將文件放入目錄“test”中。

如何將文件寫入目錄?

首先創建新目錄,然后將流復制到該目錄中的新文件中:

Path to = Paths.get("mynewdir/test");
Files.copy(is, to);

還請記住,InputStream沒有文件名,因此在將流寫入磁盤時始終需要提供文件名。 在您的示例中,它確實會嘗試創建文件“ test”,但是顯然這是一個已經存在的文件夾(因此為Exception)。 因此,您需要指定完整的文件名。

Files.copy(from, to)的'to'參數是目標文件的路徑。

嘗試在測試目錄中指定什么文件名:

Path to = Paths.get("test/newfilename");
Files.copy(is, to);

這是您的問題答案:

參考您的代碼段:Paths.get(“ test”); 您正在詢問當前目錄中名為“ test”的文件的文件路徑,而不是該目錄。 如果要引用測試目錄下的文件,該文件位於當前目錄下的tern中。 使用以下命令:您要將流數據寫入的Paths.get(“ test / filename.ext”)。

如果您兩次運行應用程序,則會得到“ FileAlreadyExistsException”,因為“文件”上的復制方法會寫入新文件,如果存在,它將不會覆蓋該文件。

我希望這可以幫助你!

您可以使用選項StandardCopyOption.REPLACE_EXISTING

    public void copyFileFromInputStream(InputStream is) {
        Path to = Paths.get("test");
        Files.copy(is, to, StandardCopyOption.REPLACE_EXISTING);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM