Unity Android(五)通过smb协议Android设备访问Win10共享文件夹

PS:背景需求来自Andorid移动端访问Window共享文件夹

工具:

Unity2018.4.36f1         AS2020.3

什么是smb协议

SMB 一种客户机/服务器、请求/响应协议。通过 SMB 协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。此外通过 SMB 协议,应用程序可以访问远程服务器端的文件、以及打印机、邮件槽(mailslot)、命名管道(named pipe)等资源

打开smb协议

控制面板-程序-启用或关闭Window功能-勾选SMB 1.0/CIFS 文件共享与支持

Unity Android(五)通过smb协议Android设备访问Win10共享文件夹

 

开启共享文件夹

Unity Android(五)通过smb协议Android设备访问Win10共享文件夹 

开启访问权限:

控制面板--网络和Internet--网络和共享中心--高级共享设置

Unity Android(五)通过smb协议Android设备访问Win10共享文件夹

 

SMBFile流

建立文件流连接
SmbFile remoteFile = new SmbFile("smb://192.168.1.XXX/Test/"); //可以是文件夹或文件

读文件流:  
SmbFileInputStream inputStream = new SmbFileInputStream("smb://192.168.1.XXX/Test/a.txt");
写文件流:
SmbFileOutputStream outputStream =new FileOutputStream(filePath);//filepath=remoteFile.getpath()获取
//localDir保存到本地文件夹路径
public static void smbGet(String remoteUrl, String localDir)
{
    InputStream in = null;
    OutputStream outputStream = null;
    try {
       SmbFile remoteFile = new SmbFile(remoteUrl);
       if (remoteFile == null) {
          return;
       }
        String fileName =remoteFile.getName();
        int length = remoteFile.getContentLength();// 得到文件的大小
        byte buffer[] = new byte[length];
        SmbFileInputStream inputStream = new SmbFileInputStream(remoteFile); // 建立smb文件输入流
        while ((inputStream.read(buffer)) != -1)
            {
                System.out.write(buffer);
            }
        inputStream.close();
        File localFile = new File(localDir + File.separator+fileName );
        try {
                //向文件中写入字节数组
                String fileSavePath=localFile.getPath();
                outputStream = new FileOutputStream(fileSavePath);
                outputStream.write(buffer);
                outputStream.flush();
                //关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。 如果此流有一个与之关联的通道,则关闭该通道。
                outputStream.close();

            } catch (Exception e) {
                e.printStackTrace();
            }

    }
    catch(Exception e)
    {
    
    }

}


if (smbFile.isDirectory())  //判断remoteUrl是否是文件夹
{
  
}
if (smbFile.isFile())    //判断remoteUrl是否是文件
{
    
}
//往远程共享目录写入文件,如txt 、Json等
    //SmbFile smbFileOut = new SmbFile("smb://192.168.1.xxx/Test/bb.txt");
    public static void smbWriteFilesToRemote(String remoteUrl,String data)
    {

        try
        {
            SmbFile smbFileOut = new SmbFile(remoteUrl);
            if(!smbFileOut.exists())
                smbFileOut.createNewFile();
            SmbFileOutputStream outputStream = new SmbFileOutputStream(smbFileOut);
            outputStream.write(data.getBytes());
            outputStream.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

    }

AS打包aar

如果不会打包aar,可以参看我的上一篇文章 AS打包aar

Unity编译APK以及调用aar

参考文献:

1. https://www.cnblogs.com/firstdream/p/5165362.html    基于SMB协议的共享文件读写 

2. https://blog.csdn.net/weixin Android访问共享文件夹   Android 访问局域网内的共享文件夹

3.https://blog.csdn.net/u012539700/article/details/文件流读写   Android10文件流读写

4.  https://bbs.csdn.net/topics/350063921  Android写文件Permission denied

上一篇:[Unity基础]01Unity基本操作


下一篇:1.rider链接unity不成功的问题、2. packManger链接不上的问题、3.public字体一直粗体的问题