Java renameTo()在samba mount上留下cifs *文件

时间:2014-07-08 22:49:56

标签: java samba cifs

我有一个linux java程序,它正在读取和写入CIFS挂载的Windows文件共享。请参阅底部的代码段。

执行后,有一些名为" cifs *"留在目录中。如果目标目录位于本地文件系统上,则代码就像一个冠军。但是,如果目标目录是CIFS挂载的Windows文件共享,我会得到剩余的文件。我不确定需要修改哪些配置更改。非常感谢任何帮助。

FileRenameMutex myFileRenameMutex = new FileRenameMutex("/WindowsMount/MoveLock");

class FileRenameMutex
{
    // global variables
    String lockFileBasename;
    String unusedExtension = "_Unused";
    String unusedFilename;
    String inUseFilename;
    String localMachineAddress;
    String formattedTime;

    // log4j logger for this class
    public static Logger logMutex = Logger.getLogger(FileRenameMutex.class.getName());

    public FileRenameMutex(String _lockFileBase) {
        this.lockFileBasename = _lockFileBase;
        logMutex.debug("FileRenameMutex: Constructor, with file " + lockFileBasename + "   user = " + System.getProperty("user.name"));
        try {
            localMachineAddress = InetAddress.getLocalHost().getHostAddress();
            //localMachineAddress = InetAddress.getLocalHost().getHostName();
        } catch ( Exception e ) {
            localMachineAddress = "UNKNOWN_HOST";
            logMutex.error("   Could not determine host address. " + e.getMessage());
        }

        // set the file names
        unusedFilename = lockFileBasename + unusedExtension;
        inUseFilename = lockFileBasename + "_" + localMachineAddress;

        logMutex.debug("   Local machine = " + localMachineAddress);
        logMutex.debug("   Unused file name = " + this.unusedFilename);
        logMutex.debug("   In Use file name = " + this.inUseFilename);

    }
    public boolean tryAcquire() throws InterruptedException {
        boolean returnVal = false;
        File unusedFile = new File(unusedFilename);
        File inUseFile  = new File(inUseFilename);
        formattedTime = new Date().toString();
        String inUseText = "This file created by the Alfresco cron job to MoveFileAndCreateDir "
                           + "(move files from Unfiled to Filed folders).\n"
                           + "Running on " + localMachineAddress + "\n Started at " + formattedTime + "\n";
        try {
            FileWriter fstream = new FileWriter(inUseFile);
            BufferedWriter out = new BufferedWriter(fstream);
            // attempt to rename file
            logMutex.debug("   Attempting to rename mutex file " + unusedFilename + " to " + inUseFilename);
            if ( unusedFile.renameTo(inUseFile) ) {
                logMutex.debug("      Rename to inUse successful");
                out.write(inUseText);
                out.flush();
                out.close();
                returnVal = true;  // lock was acquired
            } else {
                // System.out.println("Rename to inUse failed");
                logMutex.error("      Rename of " + unusedFilename + " to " + inUseFilename + " failed in tryAcquire().");
            }
        } catch ( Exception e ) {
            throw new InterruptedException("Error acquiring lock in tryAcquire(): " + e.getMessage());
        }
        return returnVal;
    }

    public void release() {
        File unusedFile = new File(unusedFilename);
        File inUseFile  = new File(inUseFilename);
        String unusedText = "This file was last by the Alfresco cron job to MoveFileAndCreateDir "
                           + "Ran on " + localMachineAddress + "\n Started at " + formattedTime + "\n";
        try {
            FileWriter fstream = new FileWriter(inUseFile);
            BufferedWriter out = new BufferedWriter(fstream);
            out.write(unusedText);
            out.flush();
            out.close();
            // attempt to rename file
            logMutex.debug("   Attempting to rename active mutex file " + inUseFilename + " back to " + unusedFilename);
            if ( inUseFile.renameTo(unusedFile) ) {
                logMutex.debug("      Rename back to unused successful");
            } else {
                logMutex.error("      Rename of " + inUseFilename + " to " + unusedFilename + " failed in release().");
            }
        } catch ( Exception e ) {
            logMutex.error("Error resetting lock file in release(): " + e.getMessage());
        }

    }  // release()

}  // end of class FileRenameMutex

0 个答案:

没有答案
相关问题