为什么调用ftpClient.printWorkingDirectory()返回的是NULL 大家帮看一下

问题描述

publicclassZipFileTest{privateFTPClientftpClient;publicvoidloginFtp(){this.ftpClient=newFTPClient();try{this.ftpClient.connect("192.168.10.107",21);this.ftpClient.login("admin","admin");}catch(SocketExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicZipFileTest(StringzipPath,StringremoteName){loginFtp();//登录FTPZipEntryze;byte[]bt=newbyte[1024];intlen=0;try{ftpClient.cwd(zipPath);System.out.println(ftpClient.printWorkingDirectory());InputStreamis=this.ftpClient.retrieveFileStream(remoteName);ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);System.out.println(ftpClient.printWorkingDirectory());ZipInputStreamzis=newZipInputStream(is);while((ze=zis.getNextEntry())!=null){if(ze.isDirectory()){String[]folders=ze.getName().split("/");for(inti=0;i<folders.length;i++){if(!ftpClient.changeWorkingDirectory(folders[i])){//System.out.println(ftpClient.printWorkingDirectory());ftpClient.makeDirectory(folders[i]);}ftpClient.changeWorkingDirectory(folders[i]);}ftpClient.changeWorkingDirectory(zipPath);}else{//System.out.println(ftpClient.printWorkingDirectory());String[]folders=ze.getName().split("/");for(inti=0;i<folders.length;i++){if(!ftpClient.changeWorkingDirectory(folders[i])){if(i==(folders.length-1)){OutputStreamops=ftpClient.storeFileStream(folders[i]);while((len=zis.read(bt,0,1024))!=-1){ops.write(bt,0,len);}ops.close();}else{ftpClient.makeDirectory(folders[i]);}}ftpClient.changeWorkingDirectory(folders[i]);}ftpClient.changeWorkingDirectory(zipPath);}}is.close();zis.close();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicstaticvoidmain(String[]args)throwsInterruptedException{StringremoteName="Fishing_Reel.zip";StringzipPath="/model/AO/AOTR/PRODECT/";newZipFileTest(zipPath,remoteName);}}//----------------------------------我在调用ftpClient.retrieveFileStream(remoteName)这个方法之后ftpClient.printWorkingDirectory()这个方法就返回NULL,后面的在保存解压的文件时就会报java.lang.NullPointerException

解决方案

解决方案二:
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);如果我把上面这行改为//ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.completePendingCommand();则ftpClient.printWorkingDirectory()输出正常目录,但是遇到稍大一点的ZIP文件就会假死这在。在网上查了一下要调用ftpClient.printWorkingDirectory()之前必需先调用InputStream.Close(),如果关了输入流那我下面的ZipInputStream就会报错。
解决方案三:
InputStreamis=this.ftpClient.retrieveFileStream(remoteName);是不是这句的错误这句是干什么的?我怎么没用过....
解决方案四:
引用2楼dyllove98的回复:

InputStreamis=this.ftpClient.retrieveFileStream(remoteName);是不是这句的错误这句是干什么的?我怎么没用过....

通过调用这个方法retrieveFileStream(remoteName)得到一个文件输入流,在后面会把这个输入流放进ZipInputStreamzis=newZipInputStream(is);为了得到一个压缩文件流,担是我在InputStreamis=this.ftpClient.retrieveFileStream(remoteName);这一行后面加上ftpClient.completePendingCommand();ftpClient.printWorkingDirectory()就可以正常输出

时间: 2024-09-13 03:27:38

为什么调用ftpClient.printWorkingDirectory()返回的是NULL 大家帮看一下的相关文章

微信支付 获取预支付ID时 调用官方接口返回为NULL

问题描述 微信支付 获取预支付ID时 调用官方接口返回为NULL 解决方案 没有注册微信支付接口,所以是null.找腾讯注册. 解决方案二: 官方例子是官方例子,微信支付接口是要注册的,人家靠这个盈利.官方例子不一定非要写上具体的ID.有效的ID是一串数字. 具体含义,该网站有相应的标准文本PDF(要积分的).unifiedorder含义是唯一码,具体使用是一串数字.申请注册后就会得到. 微信支付涉及金融,是要经过银行的.该标准是银行发布的.制定者由银行.支付宝.微信支付等不同人员参与.通过后,

java-代码中子类在调用重名方法时返回结果为null,究竟调用过程是怎样的?

问题描述 代码中子类在调用重名方法时返回结果为null,究竟调用过程是怎样的? class father { private String name; father(String name) { this.name=name; } public String get_name() { return this.name; } } class son extends father { private String name; son(String name) { super(name); } pub

编程-请问在PHP中用empty调用__isset一直返回true

问题描述 请问在PHP中用empty调用__isset一直返回true 为什么在php中类实例化后,用var_dump(empty($mod->a)) 一直都在返回true 解决方案 没看明白你这个问题要表达什么意思 empty 如果变量 是非空或非零的值,则 empty() 返回 FALSE.换句话说,"".0."0".NULL.FALSE.array().var $var.未定义; 以及没有任何属性的对象都将被认为是空的,返回 TRUE. isset 如果

wsdl-webservice服务器返回值为null

问题描述 webservice服务器返回值为null 用myeclipse的jax-ws做的服务器,按照如下教程做的.http://blog.csdn.net/flightme/article/details/6977191 服务器挂的tomcat7,用wsdl2objc转换为xcode的代码,在xcode中调用,以下是xcode的教程.http://www.devdiv.com/iOS_iPhone-_wsdl_objc_web_service_soap_sample-thread-36521

java ee-httppost = new HttpPost(Uri) 返回值为null! 不知道为什么

问题描述 httppost = new HttpPost(Uri) 返回值为null! 不知道为什么 RT http.java public class Http { static HttpEntity entity; //HttpEntity是可以同Http消息进行接受或发送的实体,可以是流或者字符串 static HttpResponse response; //HttpResponse是一个Http连接响应,可以通过它来获得一些响应的信息 static HttpPost httppost;

图片-BitmapFactory.decodeStream返回bitmap为null

问题描述 BitmapFactory.decodeStream返回bitmap为null 图片下载的时候,response转化为inputstream,经过二次采样后再调用BitmapFactory.decodeStream(mInputStream, null, mop)返回bitmap为null 解决方案 不贴代码怎么看? 解决方案二: 详细代码贴出来看看吧!这样也不晓得

oracle11g-vs2012调用oracle存储过程返回输出字符串的值的问题

问题描述 vs2012调用oracle存储过程返回输出字符串的值的问题 vs2012调用oracle存储过程返回输出字符串的值的问题,在plsql中执行存储过程是没有问题的,输出的字符串也有值,但在vs中取输出参数的值时,此字符串的值为null,但 如果输出为整数,则可以得到返回值. 解决方案 贴出你的代码看看.你的参数传的对不对 解决方案二: OracleConnection conn = new OracleConnection(connstr); conn.Open(); OracleCo

android6.0版本调用系统相册返回参数cursor为空

问题描述 android6.0版本调用系统相册返回参数cursor为空 Uri selectedImage = data.getData(); pathString = CommonTools.Uri2Path(selectedImage, SharedPhotoActivity.this); /** * 通过uri得到path */ public static String Uri2Path(Uri uri, Context context) { String[] filePathColumn

C#调用存储过程并返回结果

问题描述 虚心请教专家个问题:在C#中调用执行存储过程返回存储过程的结果并想与DATAGRID绑定显示,在界面上输入三个文本框内容作为存储过程的输入参数,请问代码该如何实现啊?如何与DATAGRID绑定代码是?SqlConnectionCS=newSqlConnection("Password=123456;UserID=sa;"+"InitialCatalog=xsgl_en;"+"DataSource=(local)");SqlCommand