Java JCIFS SmbFile重命名无法移动文件

Java JCIFS SmbFile重命名无法移动文件,java,groovy,smb,Java,Groovy,Smb,我使用JCIFS SmbFile.renameTo()方法有最奇怪的行为。当我执行下面的代码时,它应该将网络文件从test1移动到test2,但是它在test2中创建了一个名为test.xml的文件夹,并抛出以下错误“当该文件已经存在时无法创建文件…”,我无法理解。为什么这个方法会这样做 NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication (sDomain,

我使用JCIFS SmbFile.renameTo()方法有最奇怪的行为。当我执行下面的代码时,它应该将网络文件从test1移动到test2,但是它在test2中创建了一个名为test.xml的文件夹,并抛出以下错误“当该文件已经存在时无法创建文件…”,我无法理解。为什么这个方法会这样做

 NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication (sDomain, 
                                       sUsername, sPassword);
 SmbFile smbFromFile = new SmbFile("smb://test1/test.xml", auth);
 SmbFile smbToFile = new SmbFile("smb://test2/test.xml", auth);
 smbFromFile.renameTo(smbToFile);

和之间有一个有趣的区别——其中只有一个表示此文件和目标文件不需要位于同一主机上。由于
renameTo(SmbFile)
没有这样说,我只能假设您应该使用
copyTo
,然后使用原始文件

SmbFile smbFromFile = new SmbFile("smb://test1/test.xml", auth);
SmbFile smbToFile = new SmbFile("smb://test2/test.xml", auth);
// smbFromFile.renameTo(smbToFile);
smbFromFile.copyTo(smbToFile);
smbFromFile.delete();

和之间有一个有趣的区别——其中只有一个表示此文件和目标文件不需要位于同一主机上。由于
renameTo(SmbFile)
没有这样说,我只能假设您应该使用
copyTo
,然后使用原始文件

SmbFile smbFromFile = new SmbFile("smb://test1/test.xml", auth);
SmbFile smbToFile = new SmbFile("smb://test2/test.xml", auth);
// smbFromFile.renameTo(smbToFile);
smbFromFile.copyTo(smbToFile);
smbFromFile.delete();

有两种可能的情况:

1.文件需要在同一服务器上移动(即,输入文件夹和输出文件夹的身份验证详细信息相同)

使用renameTo()方法。

2.文件需要在不同的服务器上移动(即,输入文件夹和输出文件夹的身份验证详细信息不相同)

使用copyTo()方法。

在这里,我建议您首先对文件所在的第一台服务器进行身份验证,并检查该文件是否存在,如果存在,然后将其添加到列表中:

public List<SmbFile> xmlFiles = new ArrayList<>(); //Here we will add all the files which are existing.

public boolean isFileExists() throws MalformedURLException, SmbException {
  NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", 
  userID, userPassword); //authenticating input folder.
    SmbFile smbFile = new SmbFile(inputFolder, auth);
    SmbFile[] smbFiles = smbFile.listFiles();
    boolean isFilePresent = false;
    if (smbFiles.length > 0) {
        for (SmbFile file : smbFiles) {
            if (file.getName().toLowerCase(Locale.ENGLISH)              
       .contains(AppConstant.FILE_NAME.toLowerCase(Locale.ENGLISH))) {
                xmlFiles.add(file);
                isFilePresent = true;
            }
        }
    }
    if (isPlanFilePresent) {
        log.info("Number of files present on Server: {}",smbFiles.length);
        return true;
    }
    return false;
}

很乐意提供帮助:)

有两种可能的情况:

1.文件需要在同一服务器上移动(即,输入文件夹和输出文件夹的身份验证详细信息相同)

使用renameTo()方法。

2.文件需要在不同的服务器上移动(即,输入文件夹和输出文件夹的身份验证详细信息不相同)

使用copyTo()方法。

在这里,我建议您首先对文件所在的第一台服务器进行身份验证,并检查该文件是否存在,如果存在,然后将其添加到列表中:

public List<SmbFile> xmlFiles = new ArrayList<>(); //Here we will add all the files which are existing.

public boolean isFileExists() throws MalformedURLException, SmbException {
  NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("", 
  userID, userPassword); //authenticating input folder.
    SmbFile smbFile = new SmbFile(inputFolder, auth);
    SmbFile[] smbFiles = smbFile.listFiles();
    boolean isFilePresent = false;
    if (smbFiles.length > 0) {
        for (SmbFile file : smbFiles) {
            if (file.getName().toLowerCase(Locale.ENGLISH)              
       .contains(AppConstant.FILE_NAME.toLowerCase(Locale.ENGLISH))) {
                xmlFiles.add(file);
                isFilePresent = true;
            }
        }
    }
    if (isPlanFilePresent) {
        log.info("Number of files present on Server: {}",smbFiles.length);
        return true;
    }
    return false;
}
乐意帮忙:)