我正在编写一个android应用程序以从网络下载一个文件,但是我一直收到以下错误:
jcifs.smb.ServerMessageBlock.writeString(ServerMessageBlock.java:213) at jcifs.smb.ServerMessageBlock.writeString(ServerMessageBlock.java:202) at jcifs.smb.SmbComNTCreateAndX.writeBytesWireFormat(SmbComNTCreateAndX.java:170) at jcifs.smb.AndXServerMessageBlock.writeAndXWireFormat(AndXServerMessageBlock.java:101) at jcifs.smb.AndXServerMessageBlock.encode(AndXServerMessageBlock.java:65)在jcifs.smb.SmbTransport.doSend(SmbTransport.java:415) at jcifs.util.transport.Transport.sendrecv(Transport.java:70) at jcifs.smb.SmbTransport.send(SmbTransport.java:619) at jcifs.smb.SmbSession.send(SmbSession.java:240) at jcifs.smb.SmbTree.send(SmbTree.java:111) at jcifs.smb.SmbFilejcifs.smb.SmbFileOutputStream.(SmbFileOutputStream.java:142) at jcifs.smb.SmbFileOutputStream.(SmbFileOutputStream.java:97) at jcifs.smb.SmbFileOutputStream.(SmbFileOutputStream.java:67)在jcifs.smb.SmbFile.open0(SmbFile.java:926)和jcifs.smb.SmbFile.open(SmbFile.java:943)在za.co.ver_tex.itqueries.NetworkShareFileCopy.copyFileUsingJcifs(NetworkShareFileCopy.java:80) at za.co.ver_tex.itqueries.ViewQuery.ViewFile(ViewQuery.java:780) at za.co.ver_tex.itqueries.ViewQuery$4.onClick(ViewQuery.java:375) at android.view.View.performClick(View.java:4633) at android.view.View$PerformClick.run(查看。android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:157) at android.app.ActivityThread.main(ActivityThread.java:5356) at java.lang.reflect.Method.invokeNative(原生方法)在java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1265) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1081) at dalvik.system.NativeStart.main(原生方法)
这是我的代码:
public void copyFromNetwork(String NetworkFile, String DestinationFile) {
NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication("Domain",
"User", "Password");
SmbFile remoteFile;
try {remoteFile =新SmbFile("smb:“+ 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);
}
}发布于 2014-10-23 09:21:45
remoteFile不是创建的,这是NullPointerException的原因。首先,在使用类之前为类创建对象:
SmbFile remoteFile;//<-- HERE
try {
OutputStream os = new FileOutputStream(DestinationFile);
InputStream is = null;
is = remoteFile.getInputStream();NullPointer:
is = remoteFile.getInputStream();// Thrown here!我不知道SmbFile,但你需要这样的东西:
SmbFile remoteFile = new SmbFile();发布于 2017-08-31 11:50:09
由于有一个非常类似的问题,我认为文件路径很可能没有遵循SMB要求。如果您调试,并且SmbFile实例的unc字段为null,则会确认我的怀疑。可以通过遵循源代码文档中的规范(在初始导入语句之后)来解决这个问题。这里有一个选择:
SMB URL示例
smb://users-nyc;miallen:mypass@angus/tmp/此URL将服务器angus上名为tmp的共享引用为密码为mypass的用户miallen。smb://Administrator:P%40ss@msmith1/c/WINDOWS/Desktop/foo.txt一个相对复杂的示例,它将文件msmith1 1的桌面引用为用户管理员。注意,“@”是用'%40‘十六进制代码转义编码的URL。smb://angus/这仅引用一台服务器。但是,某些方法在此上下文中的行为是不同的(例如,您不能删除服务器),正如您可能期望的那样,list方法将列出此服务器上的可用共享。smb://myworkgroup/这个语法与上面的例子是完全相同的。但是,如果myworkgroup碰巧是一个工作组(确实是由名称建议的),list方法将返回已注册为myworkgroup成员的服务器列表。smb://就像smb://server/列出共享和smb://workgroup/列出服务器一样,smb:// URL也列出了netbios上所有可用的工作组。同样,在这种情况下,许多方法是无效的,并返回默认值(例如,isHidden总是返回false)。smb://angus.foo.net/d/jcifs/pipes.doc如本例所示,服务器名称也可能是DNS名称。有关详细信息,请参见设置名称解析属性。smb://192.168.1.15/ADMIN$/服务器名也可以是IP地址。有关详细信息,请参见设置名称解析属性。smb://domain;username:password@server/share/path/to/file.txt一个使用所有字段的典型示例。smb://myworkgroup/angus/<--非法 尽管工作组、服务器和文件系统之间存在层次关系,但此示例无效。smb://server/share/path/to/dir<--非法 表示工作组、服务器、共享或目录的URL需要尾随斜杠“/”。smb://MYGROUP/?SERVER=192.168.10.15SMB URL支持一些查询字符串参数。在本例中,服务器参数用于覆盖服务器名称服务查找,以联系工作组MYGROUP中服务器列表的服务器192.168.10.15 (可能已知为主浏览器)。
https://stackoverflow.com/questions/26524940
复制相似问题