Java jscape sftp上载保留文件权限

Java jscape sftp上载保留文件权限,java,upload,ftp,sftp,Java,Upload,Ftp,Sftp,我正在使用jscape sftp传输文件 com.jscape.inet.sftp.Sftp Sftp sftpSession = null; // after the required step to connect // through SshParameters sftpSession.setDir(remotedirectory); sftpSession.upload(localFile, remoteFile); 现在,这段代码正在传输文件,这部分可以了。但远程计算机中的文件

我正在使用
jscape sftp
传输文件

com.jscape.inet.sftp.Sftp

Sftp sftpSession = null;

// after the required step to connect
// through SshParameters

sftpSession.setDir(remotedirectory);
sftpSession.upload(localFile, remoteFile);
现在,这段代码正在传输文件,这部分可以了。但远程计算机中的文件权限正在发生更改(正在变为644)

我看到下面的方法来更改远程文件的权限

com.jscape.inet.sftp.sftp.setFilePermissions(java.lang.String remoteFile,int permissions)

我的问题是,

  • com.jscape.inet.sftp.sftp.upload
    方法是否仅以这种方式工作,在不保留权限的情况下上载文件
  • 有没有办法在不显式使用
    setFilePermissions
    方法的情况下保留权限
远程上的用户和组对正在上载的目录是否具有与本地上相同的权限?
您可以尝试使用getPermissions()方法获取本地文件的权限,并将其设置为远程文件。

使用Java 7+可以做到这一点;当然,下面的代码假设与您的设置类似,它在两端都支持POSIX兼容的文件系统

诀窍是获取一个文件的POSIX文件权限集;这是通过以下方式实现的:

// "fileToCopy" here is a Path; see Paths.get()
Files.getPosixFilePermissions(fileToCopy)
这将返回一个
,它实际上是一个枚举。使用以下技巧将枚举转换为整数:

private static int toIntPermissions(final Set<PosixFilePermission> perms)
{
    int ret = 0;
    for (final PosixFilePermission perm: PosixFilePermission.values()) {
        if (perms.contains(perm))
            ret++; // add 1
        ret <<= 1; // shift by 1
    }
    return ret;
}
private static int to intpermissions(最终设置perms)
{
int-ret=0;
for(最终PosixFilePerm:PosixFilePermission.values()){
if(perms.contains(perm))
ret++;//添加1
ret
private static int toIntPermissions(final Set<PosixFilePermission> perms)
{
    int ret = 0;
    for (final PosixFilePermission perm: PosixFilePermission.values()) {
        if (perms.contains(perm))
            ret++; // add 1
        ret <<= 1; // shift by 1
    }
    return ret;
}