You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将com.hierynomus.smbj.share.File转换为Base64字符串?(Java1.8+SMBJ0.11.5)

将SMBJ远程文件对象转换为Base64字符串(Java 1.8 + SMBJ 0.11.5)

实现逻辑

要把com.hierynomus.smbj.share.File对象转为Base64字符串,核心是两步:先读取远程文件的字节数据,再用Java 8内置的Base64工具类完成编码。

代码示例

基础实现

import com.hierynomus.smbj.share.File;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;

// 假设已通过networkShare.openFile(...)获取到remoteFile实例
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
byte[] buffer = new byte[4096]; // 4KB缓冲区,可根据文件大小调整
int readBytes;

try {
    // 循环读取远程文件内容到字节流
    while ((readBytes = remoteFile.read(buffer, 0, buffer.length)) != -1) {
        byteStream.write(buffer, 0, readBytes);
    }
    
    // 将字节数组编码为Base64字符串
    String base64Result = Base64.getEncoder().encodeToString(byteStream.toByteArray());
    
    // 后续处理base64Result
} catch (IOException e) {
    e.printStackTrace();
} finally {
    // 确保资源关闭
    try {
        byteStream.close();
        remoteFile.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

优化版(自动管理资源)

Java 8支持try-with-resources语法,无需手动关闭流和文件,更安全简洁:

import com.hierynomus.smbj.share.File;
import com.hierynomus.mssmb2.SMB2CreateOptions;
import com.hierynomus.mssmb2.SMB2AccessMask;
import com.hierynomus.mssmb2.SMB2ShareAccess;
import com.hierynomus.mssmb2.SMB2CreateDisposition;
import com.hierynomus.mssmb2.SMB2FileAttributes;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.EnumSet;

// 示例:先获取远程文件对象,再完成转换
try (File remoteFile = networkShare.openFile(
        "/remote/path/to/target.file",
        EnumSet.noneOf(SMB2CreateOptions.class),
        EnumSet.of(SMB2AccessMask.GENERIC_READ),
        EnumSet.of(SMB2ShareAccess.FILE_SHARE_READ),
        SMB2CreateDisposition.FILE_OPEN,
        EnumSet.noneOf(SMB2FileAttributes.class)
     );
     ByteArrayOutputStream byteStream = new ByteArrayOutputStream()) {

    byte[] buffer = new byte[4096];
    int readBytes;
    while ((readBytes = remoteFile.read(buffer, 0, buffer.length)) != -1) {
        byteStream.write(buffer, 0, readBytes);
    }
    
    String base64Result = Base64.getEncoder().encodeToString(byteStream.toByteArray());
    // 处理Base64字符串
} catch (IOException e) {
    e.printStackTrace();
}

DiskShare.openFile方法参数说明(中文翻译)

File openFile(String path, 
              Set<SMB2CreateOptions> createOptions, 
              Set<SMB2AccessMask> accessMask, 
              Set<SMB2ShareAccess> shareAccess, 
              SMB2CreateDisposition createDisposition, 
              Set<SMB2FileAttributes> fileAttributes)
  • path:远程文件在共享目录下的相对路径或绝对路径
  • createOptions:SMB2创建选项集合,控制文件打开/创建的行为逻辑
  • accessMask:SMB2访问权限掩码集合,指定对该文件的操作权限(如只读、读写)
  • shareAccess:SMB2共享访问权限集合,定义其他进程可对该文件执行的操作(如允许其他进程读)
  • createDisposition:SMB2创建处置策略,指定文件存在/不存在时的处理方式(如FILE_OPEN打开已存在文件,FILE_CREATE创建新文件)
  • fileAttributes:SMB2文件属性集合,设置文件的属性(如只读、隐藏)

内容的提问来源于stack exchange,提问作者Sathishkumar C

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:15:40