4

我需要从我的 Android 手机连接到 Windows PC 共享并访问文件。我在 Android 市场上看到了一些使用 smb/samba 访问共享文件夹的示例应用程序。但我不知道如何创建这样的应用程序。非常感谢。

4

2 回答 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 回答