![](/img/trans.png)
[英]Files.move and Files.copy is throwing java.nio.file.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.