在下面的代码语句中:
SmbFileInputStream din==new SmbFileInputStream(src);
我正在尝试创建一个 SmbFileInputStream 对象。如果 SmbFile 'src' 是一个文件,这将正常工作,但如果 'src' 是一个 smb 目录,那么它会抛出异常:
jcifs.smb.SmbException: Access is Denied.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:622)
at jcifs.smb.SmbTransport.send(SmbTransport.java:722)
at jcifs.smb.SmbSession.send(SmbSession.java:262)
at jcifs.smb.SmbTree.send(SmbTree.java:119)
at jcifs.smb.SmbFile.send(SmbFile.java:785)
at jcifs.smb.SmbFile.open0(SmbFile.java:1009)
at jcifs.smb.SmbFile.open(SmbFile.java:1026)
at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73)
at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65)
at testhelp.main(testhelp.java:25)
这段代码有什么问题?或者我哪里错了?
嗨,请检查此代码:
case DOWNLOAD2:
/*This code snippet is used to download a file/folder from smb nETWORK to android sd card.
when I run this code its throwing some exception. It have commented where ever necessary. rest of the code is self
explanatory. So please go through the code and please tell why this exception is thrown.
IF POSSIBLE PLEASE ADD A PROGRESS BAR WHICH SHOULD HELP USER SAYING SOME WORK IS GOING ON.
I have tried including a progress bar, but its not working. I ve read some materials related to this,
but every thing makes use threads. I am not that good at threads. So is it possible to include a progess bar,
without using threads?If possible please help me to do it.
And this code is working file for smb files, I dont know why its throwing exception in case of directories.
Please see why this is throwing exception..
So please see that the modified code contains:
a)no exceptions
b)a progress bar(more specifically a horizontal bar)*/
/*exception thrown:
jcifs.smb.SmbException: Access is Denied.
at jcifs.smb.SmbTransport.checkStatus(SmbTransport.java:622)
at jcifs.smb.SmbTransport.send(SmbTransport.java:722)
at jcifs.smb.SmbSession.send(SmbSession.java:262)
at jcifs.smb.SmbTree.send(SmbTree.java:119)
at jcifs.smb.SmbFile.send(SmbFile.java:785)
at jcifs.smb.SmbFile.open0(SmbFile.java:1009)
at jcifs.smb.SmbFile.open(SmbFile.java:1026)
at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:73)
at jcifs.smb.SmbFileInputStream.<init>(SmbFileInputStream.java:65)
at testhelp.main(testhelp.java:25)*/
StatFs statFs = new StatFs(Environment.getExternalStorageDirectory().getAbsolutePath());
//if sd card is mounted then only this operation occur:
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))
{
//object.getCount() gets the number of objects in list view
for(int i=0;i<object.getCount();i++)
{
//for each object in list view, if it is checked:
if(object.getter(i)==true)
{
SmbFileInputStream din=null;
FileOutputStream dout=null;
try
{
//I have used a hash table, which maps list view name with smb object
SmbFile src=map.get(object.getItem(i));
long blockSize = statFs.getBlockSize();
long freeSize = statFs.getFreeBlocks()*blockSize;
long diff=freeSize-src.length();
boolean can=false;
if(!(diff<0))
{
can=true;
}
if(!src.isHidden() && can)
{
try
{
if(src.isFile())
{
din=new SmbFileInputStream(src);
dout=new FileOutputStream(Environment.getExternalStorageDirectory()+"/"+src.getName());
}
else
{
din=new SmbFileInputStream(src);
File outputFile = new File(Environment.getExternalStorageDirectory()+"/"+src.getName()); // ADDED
outputFile.mkdirs(); // ADDED
dout=new FileOutputStream(outputFile); // CHANGED
}
int c;
while((c=din.read())!=-1)
{
dout.write(c);
}
}
finally
{
if (din != null)
{
din.close();
}
if (dout != null)
{
dout.close();
}
}
}
else
{
Toast.makeText(this,src.getName()+" cannot be downloaded",Toast.LENGTH_LONG).show();
}
}
catch(IOException e)
{
Toast.makeText(this,"DOWNLOAD FAILED--IO EXCEPTION\n"+e,Toast.LENGTH_LONG).show();
}
}
}
}
else
{
Toast.makeText(this,"DOWNLOAD FAILED--NO SD CARD FOUND",Toast.LENGTH_LONG).show();
}
return true;