计划使用jcif从Java中的Ubuntu通过Windows读取文件。使用以下简单方法:
String user = "mydomain;myuser:mypassword";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(user);
SmbFile remotefile = new SmbFile("smb://myserver/myfolder/myfile.jar",auth);
知道服务器正常工作且登录值是正确的,我得到的只是登录失败,这可能是什么问题?
答案 0 :(得分:6)
不确定你是否有这个工作。
但经过多次痛苦和痛苦之后,我认为NtlmPasswordAuthentication
电话必须包含域名。
因此,如果您使用的是发布的@ user717630代码,则只需将NtlmPasswordAuthentication
调用更改为:
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("mydomain",user, pass);
答案 1 :(得分:3)
以下程序在受保护的共享文件夹上验证和写入文件:
import java.util.Properties;
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import jcifs.smb.SmbFileOutputStream;
public class ProtectFolderTest {
private String USER_NAME = null;
private String PASSWORD = null;
private String DOMAIN = null;
private String NETWORK_FOLDER = null;
public static void main(String args[]) {
try {
String fileContent = "Hi, This is the SmbFile.";
new ProtectFolderTest().copyFiles(fileContent, "SmbFile1.text");
} catch (Exception e) {
System.err.println("Exception caught. Cause: " + e.getMessage());
}
}
public boolean copyFiles(String fileContent, String fileName) {
boolean successful = false;
String path = null;
NtlmPasswordAuthentication auth = null;
SmbFile sFile = null;
SmbFileOutputStream sfos = null;
try {
USER_NAME = "username";
PASSWORD = "password";
DOMAIN = "domain";
NETWORK_FOLDER = "smb://machineName/network_folder/";
auth = new NtlmPasswordAuthentication(
DOMAIN, USER_NAME, PASSWORD);
path = NETWORK_FOLDER + fileName;
sFile = new SmbFile(path, auth);
sfos = new SmbFileOutputStream(sFile);
sfos.write(fileContent.getBytes());
successful = true;
System.out.println("File successfully created.");
} catch (Exception e) {
successful = false;
System.err.println("Unable to create file. Cause: "
+ e.getMessage());
}
return successful;
}
}
希望这很有用。期待对此的反馈。
谢谢,
元帅。
答案 2 :(得分:2)
以下是您的解决方案我稍微更改了代码以使其更具可读性。 创建共享文件夹并将共享文件夹名称放在下面的变量(sharedFolder)中 如果你不知道如何在Windows上创建共享文件夹...一如既往地使用谷歌。此外,请确保您使用的此用户至少具有该文件夹的读取权限。
String user = "your_user_name";
String pass ="your_pass_word";
String sharedFolder="shared";
String path="smb://ip_address/"+sharedFolder+"/myfile.jar";
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("",user, pass);
SmbFile smbFile = new SmbFile(path,auth);
SmbFileOutputStream smbfos = new SmbFileOutputStream(smbFile);
答案 3 :(得分:1)
尝试使用IP地址而不是服务器名称,看看它是否连接。它可能无法解析服务器名称。
答案 4 :(得分:1)
评论" peterb"答案:" ...电话必须包括域名..."
我发现在我的情况下,NtlmPasswordAuthentication("域","用户名","密码")需要这样的输入: domain是具有共享路径的长域:\ xxxx.domain.xxxx.com \ path。 username是域名:domain \ username。 密码=密码。
我希望这会对某人有所帮助。
BEM