Java getInputStream处的jcifs nullpointerexception

Java getInputStream处的jcifs nullpointerexception,java,android,jcifs,Java,Android,Jcifs,我正在编写一个android应用程序,以便从网络下载文件,但我不断收到以下错误: java.lang.NullPointerException 位于jcifs.smb.ServerMessageBlock.writeStringServerMessageBlock.java:213 位于jcifs.smb.ServerMessageBlock.writeStringServerMessageBlock.java:202 在jcifs.smb.SmbComNTCreateAndX.WriteByt

我正在编写一个android应用程序,以便从网络下载文件,但我不断收到以下错误:

java.lang.NullPointerException 位于jcifs.smb.ServerMessageBlock.writeStringServerMessageBlock.java:213 位于jcifs.smb.ServerMessageBlock.writeStringServerMessageBlock.java:202 在jcifs.smb.SmbComNTCreateAndX.WriteBytes重新格式化SmbComNTCreateAndX.java:170 在jcifs.smb.AndXServerMessageBlock.writeAndXWireFormatAndXServerMessageBlock.java:101 在jcifs.smb.AndXServerMessageBlock.encodeAndXServerMessageBlock.java:65 在jcifs.smb.SmbTransport.doSendSmbTransport.java:415 在jcifs.util.transport.transport.sendrecvTransport.java:70 在jcifs.smb.SmbTransport.sendSmbTransport.java:619 在jcifs.smb.SmbSession.sendsbmbsession.java:240 在jcifs.smb.SmbTree.sendSmbTree.java:111 在jcifs.smb.SmbFile.sendSmbFile.java:721 在jcifs.smb.SmbFile.open0SmbFile.java:926 在jcifs.smb.SmbFile.openSmbFile.java:943 在jcifs.smb.SmbFileOutputStream.SmbFileOutputStream.java:142 在jcifs.smb.SmbFileOutputStream.SmbFileOutputStream.java:97 在jcifs.smb.SmbFileOutputStream.SmbFileOutputStream.java:67 在za.co.ver_tex.itquerys.NetworkShareFileCopy.copyFileUsingJcifsNetworkShareFileCopy.java:80 在za.co.ver_tex.itquerys.ViewQuery.ViewFileViewQuery.java:780 在za.co.ver_tex.itquerys.ViewQuery$4.onClickViewQuery.java:375 在android.view.view.performClickView.java:4633 在android.view.view$PerformClick.runView.java:19330 位于android.os.Handler.handleCallbackHandler.java:733 在android.os.Handler.dispatchMessageHandler.java:95 在android.os.Looper.Looper.java:157 在android.app.ActivityThread.mainActivityThread.java:5356 在java.lang.reflect.Method.invokenactive方法中 位于java.lang.reflect.Method.invokeMethod.java:515 位于com.android.internal.os.ZygoteInit$MethodAndArgsCaller.runZygoteInit.java:1265 位于com.android.internal.os.ZygoteInit.mainZygoteInit.java:1081 在dalvik.system.NativeStart.mainNative方法

这是我的密码 :


remoteFile=新SmbFilesmb:+NetworkFile,auth

OutputStream os = new FileOutputStream(DestinationFile);

            InputStream is = null;
is = remoteFile.getInputStream();
 int bufferSize = 5096;

            byte[] b = new byte[bufferSize];
            int noOfBytes = 0;
            while ((noOfBytes = is.read(b)) != -1) {
                os.write(b, 0, noOfBytes);
            }
            os.close();
            is.close();
} catch (Exception ex) {
            Log.w("FileCopy", ex);
        }
    }
未创建remoteFile,这就是导致NullPointerException的原因。 首先,在使用类之前为其创建对象:

SmbFile remoteFile;//<-- HERE
        try {

OutputStream os = new FileOutputStream(DestinationFile);

            InputStream is = null;
is = remoteFile.getInputStream();
我不知道SmbFile,但您需要以下内容:

SmbFile remoteFile = new SmbFile();

有一个非常类似的问题,我认为文件路径很可能不符合SMB URL要求。如果您进行了调试,并且SmbFile实例的unc字段为空,那么我的怀疑就会得到证实。它可以通过遵循初始导入语句后面右侧的规范来解决。以下是一个选择:

SMB URL示例

smb://users-nyc;米艾伦:mypass@angus/tmp/ 此URL引用服务器angus上名为tmp的共享,用户为miallen 谁的密码是mypass

smb://Administrator:P%40ss@msmith1/c/WINDOWS/Desktop/foo.txt 一个相对复杂的示例,将文件msmith1的桌面作为用户管理员引用。请注意,“@”是用“%40”十六进制代码转义编码的URL

smb://angus/ 这只引用服务器。在此上下文中,某些方法的行为是不同的。但是,您不能删除服务器,因为您可能希望list方法将列出此服务器上的可用共享

smb://myworkgroup/ 这在语法上与上述示例相同。但是,如果myworkgroup恰好是一个工作组,并且确实是由名称建议的,则list方法将返回一个已注册为myworkgroup成员的服务器列表

smb://正如smb://server/ 列出共享和smb://workgroup/ 列出服务器,smb://URL列出netbios LAN上的所有可用工作组。同样,在这种情况下,许多方法无效,并返回默认值se.g。isHidden将始终返回false

smb://angus.foo.net/d/jcifs/pipes.doc 服务器名称也可以是DNS名称,如本例所示。有关详细信息,请参见设置名称解析属性

smb://192.168.1.15/ADMIN$/ 服务器名称也可以是IP地址。有关详细信息,请参见设置名称解析属性

smb://domain;用户名:password@server/共享/path/to/file.txt 使用所有字段的原型示例


smb://myworkgroup/angus/ 该代码看起来甚至不应该编译-您正在使用remoteFile局部变量,但它没有被明确指定…抱歉,没有复制该行。请发布以下行:ServerMessageBlock.java:213remoteFile=new smbbilesmb:+NetworkFile,auth;我没有抄到我写的那行 新的SMB文件
is = remoteFile.getInputStream();// Thrown here!
SmbFile remoteFile = new SmbFile();