我需要从我的 Android 手机连接到 Windows PC 共享并访问文件。我在 Android 市场上看到了一些使用 smb/samba 访问共享文件夹的示例应用程序。但我不知道如何创建这样的应用程序。非常感谢。
问问题
17972 次
2 回答
5
您需要获取JCIFS并使用SmbFile类通过网络与文件进行交互,
http://lists.samba.org/archive/jcifs/2007-September/007465.html
这是如何列出文件的快速示例,您需要互联网许可。到目前为止,尽管每次我尝试调用 SmbFile.listFiles(); 我得到一个 UnknownHostException,但是其他人可以毫无问题地做到这一点,这可能对你有用,试试吧!
于 2012-03-28T08:49:52.073 回答
2
Google 发布了一个简单、免费的 Samba 客户端。它在 github 上,因此您可以查看并使用您需要的任何内容:https ://github.com/google/samba-documents-provider
另一个选项是 JCIFS:https ://jcifs.samba.org/ 。在那里您可以找到有关如何使用它的库和示例。
我使用了 JCIFS。这是我的代码中的一个示例,它从 Windows 共享中的文件夹中读取文件:
TreeMap<Date, String> filesInfo = new TreeMap<Date, String>();
NtlmPasswordAuthentication auth = null;
UniAddress dc = UniAddress.getByName(m_dataHostIp);
if(m_userName.length() > 0 && m_password.length() > 0)
auth = new NtlmPasswordAuthentication(m_domain + ";" + m_userName + ":" + m_password);
else
auth = new NtlmPasswordAuthentication(m_domain, null, null);
SmbSession.logon(dc, auth);
SmbFile file = new SmbFile(m_foldername, auth);
SmbFile[] files = file.listFiles();
for (int i = 0; i < files.length; i++)
{
String fileName = files[i].getName();
String extension=fileName.substring(fileName.lastIndexOf(".") + 1);
logInfo(TAG + " " + fileName + "\n");
Date fileTime = new Date(files[i].getDate());
if(m_fileExtension.contains(extension))
filesInfo.put(fileTime, fileName);
}
上面发布的代码有效。它允许您连接到共享、验证(您知道的用户名和密码)并获取文件列表。jcif 文件访问的根目录是 SmbFile,它包含访问共享中文件所需的所有信息。您只需要在 build.gradle 中添加应用程序:
dependencies {
implementation files('libs/jcifs-1.3.19.jar')
}
并在您的实现文件中:
import jcifs.smb.NtlmPasswordAuthentication;
import jcifs.smb.SmbFile;
import static jcifs.smb.SmbFile.FILE_SHARE_DELETE;
import static jcifs.smb.SmbFile.FILE_SHARE_READ;
import static jcifs.smb.SmbFile.FILE_SHARE_WRITE;
于 2018-03-20T22:16:15.233 回答