0

我有一個進程將數據庫中的文件與文件夾同步。只有低於50000個文件同步。有些文件完全同步;但是,在一個文件上,我收到一個未找到文件的例外。我檢查父目錄是否存在,如果不存在,我創建它。將文件寫入現有文件夾時發現JAVA FileNotFound

文件寫入代碼如下:

for(Map<String,Object> file: fileList) 
{ 
    createDirectory(file); //Creates the directory 

    Blob outBlob = (Blob)file.get("fileData"); 

    InputStream is = outBlob.getBinaryStream(); 
    FileOutputStream fos = new FileOutputStream((String)file.get("path")); 

    int b = 0; 
    while ((b = is.read()) != -1) 
    { 
     fos.write(b); 
    } 

    fos.flush(); 
    fos.close(); 
} 

而且createDirectory方法:

public static void createDirectory(Map<String,Object> file) throws IOException 
{ 

    // Create parent directory - If directory does not exist 
    File directory = new File(file.get("parent")); 

    if (!directory.exists()) 
    {  
     System.out.println("Parent Directory does not exist, creating ..."); 
     // ...create it 
     if (!directory.mkdirs()) 
     { 
      System.out.println("Parent Directory creation failed ..."); 
     } 
    } 
} 

這是給人的FileNotFoundException異常

FileOutputStream fos = new FileOutputStream((String)file.get("path")); 

父目錄是行C:\ temp \

我對上述文件夾有權限。

createDirectory方法不會將任何內容記錄到控制檯,因爲該目錄確實存在。

我已經搜索了幾天,無法看到爲什麼這一個文件將失敗,而其他成功。 任何幫助,將不勝感激。

上面的代碼已被修剪並且變量名稱已更改。由於安全原因,我不允許給出堆棧跟蹤。我試圖複製錯誤,但沒有這樣做的運氣。

PS這是我第一次問stackoverflow,請原諒我,如果我打破了一些標準規則。

問候,

+0

請你給更喜歡什麼ü在地圖<字符串,對象>提供的對象信息.. –

+0

你需要給我們,讓你這個錯誤的文件的實際名稱,即'file.get(「path」)'返回的字符串。它有效嗎?它是否與已經存在的目錄相同?這是代碼不如其運行的確切上下文重要的一種情況。 –

+0

謝謝。我擔心這是一個我一直想念的代碼問題。對於Map 文件失敗的文件,包含:「parent」:「C:\\ temp \\」,「fileData」:(文件字節),「path」:「C:\\ temp \\ PosNewBussinessDocument.PDF「 – Infinity

回答

0

我在我的日誌文件,定睛一看,我發現有一個在文件名前面一些奇怪的空白字符。我試圖複製這個角色,但無法做到這一點。在保存和使用文件名時,String.trim()將解決此問題。

問候,