如何定义SMB路径?Windows环境下SMB文件传输代码实现问询
搞定Windows SMB共享目录的文件写入问题
嘿,看你在写代码往SMB共享目录写文件,我来帮你捋顺这个事儿!首先得确认你用的是jcifs-ng(或者老版的jcifs)库,因为NtlmPasswordAuthentication是这个库的核心类,先确保你的项目里引入了正确的依赖哈。
首先,你代码里的SMB路径格式有点问题——咱们本地映射的是N盘,对应远程路径是\\smb\ds,转换成SMB URL应该是smb://smb/ds/TESTING_GOING_ON/test.txt,而不是你写的smb//ds/...,少了一个冒号,而且要包含服务器名smb哦。
下面给你一个完整的可运行代码示例,把字符串写入目标文件:
import jcifs.smb.NtlmPasswordAuthentication; import jcifs.smb.SmbFile; import jcifs.smb.SmbFileOutputStream; import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; public class SmbFileWriter { public static void main(String[] args) { // 格式说明:"域名/用户名:密码",无域名直接用"用户名:密码"即可 String userCredentials = "abcd:XXXXX"; // 初始化NTLM认证实例 NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(userCredentials); // 正确的SMB路径:smb://服务器名/共享名/子路径/文件名 String smbPath = "smb://smb/ds/TESTING_GOING_ON/test.txt"; try { // 创建SmbFile对象,关联路径与认证信息 SmbFile smbFile = new SmbFile(smbPath, auth); // 先检查父目录是否存在,不存在就递归创建 if (!smbFile.getParentFile().exists()) { smbFile.getParentFile().mkdirs(); } // 用try-with-resources自动关闭流,避免资源泄漏 try (SmbFileOutputStream outputStream = new SmbFileOutputStream(smbFile); OutputStreamWriter writer = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8)) { String content = "这里是你要写入的字符串内容"; writer.write(content); System.out.println("文件写入成功啦!"); } } catch (Exception e) { e.printStackTrace(); System.err.println("写入文件时出错:" + e.getMessage()); } } }
几个关键注意点:
- 依赖引入:如果用Maven,记得在
pom.xml里加jcifs-ng的依赖:<dependency> <groupId>org.codelibs</groupId> <artifactId>jcifs-ng</artifactId> <version>2.1.32</version> </dependency> - 认证格式:如果你的账号属于域环境,要写成
DOMAIN_NAME/username:password(比如WORKGROUP/abcd:XXXXX),不然可能出现认证失败。 - 权限问题:一定要确保账号
abcd对\\smb\ds\TESTING_GOING_ON目录有写入权限,不然会抛出权限不足的异常。 - 网络排查:如果遇到连接超时,检查Windows 7的防火墙是否允许SMB连接,或者有没有网络访问限制。
内容的提问来源于stack exchange,提问作者tyro
相关产品推荐
相关产品推荐

