0

データベース上のファイルとフォルダーを同期するプロセスがあります。同期するファイルは 50000 をわずかに下回っています。一部のファイルは完全に同期します。ただし、1 つのファイルで File Not Found Exception が発生します。親ディレクトリが存在するかどうかを確認し、存在しない場合は作成します。

ファイル書き込みコードは次のとおりです。

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 メソッドはコンソールに何も記録しません。

数日間検索しましたが、この 1 つのファイルが失敗し、他のファイルが成功する理由がわかりません。どんな助けでも大歓迎です。

上記のコードは削除され、変数名が変更されました。セキュリティ上の理由から、スタック トレースを提供することは許可されていません。エラーを複製しようとしましたが、うまくいきませんでした。

PSスタックオーバーフローについて質問するのはこれが初めてです。標準ルールに違反した場合はご容赦ください。

よろしく、

4

1 に答える 1

0

ログ ファイルを詳しく調べたところ、ファイル名の前に奇妙な空白文字が含まれていることがわかりました。このキャラクターを再現しようとしましたが、再現できませんでした。String.trim() は、ファイル名を保存して使用するときにこの問題を解決します。

よろしく、

于 2013-10-29T05:20:59.323 に答える