public class ZipFileTest { private FTPClient ftpClient;
public void loginFtp(){
this.ftpClient = new FTPClient();
try {
this.ftpClient.connect("192.168.10.107", 21);
this.ftpClient.login("admin", "admin");
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ZipFileTest(String zipPath,String remoteName){
loginFtp(); //登录FTP
ZipEntry ze;
byte[] bt = new byte[1024];
int len=0;
try {
ftpClient.cwd(zipPath);
System.out.println(ftpClient.printWorkingDirectory());
InputStream is =this.ftpClient.retrieveFileStream(remoteName);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
System.out.println(ftpClient.printWorkingDirectory());
ZipInputStream zis = new ZipInputStream(is);
while((ze = zis.getNextEntry())!=null){
if(ze.isDirectory() ){
String[] folders = ze.getName().split("/");
for(int i=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(int i=0;i<folders.length;i++){
if(!ftpClient.changeWorkingDirectory(folders[i])){
if(i==(folders.length-1)){
OutputStream ops = 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 (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
String remoteName = "Fishing_Reel.zip";
String zipPath = "/model/AO/AOTR/PRODECT/";
new ZipFileTest(zipPath,remoteName);
}}
//----------------------------------我在调用 ftpClient.retrieveFileStream(remoteName) 这个方法之后
ftpClient.printWorkingDirectory() 这个方法就返回NULL,后面的在保存解压的文件时就会报java.lang.NullPointerException
public void loginFtp(){
this.ftpClient = new FTPClient();
try {
this.ftpClient.connect("192.168.10.107", 21);
this.ftpClient.login("admin", "admin");
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public ZipFileTest(String zipPath,String remoteName){
loginFtp(); //登录FTP
ZipEntry ze;
byte[] bt = new byte[1024];
int len=0;
try {
ftpClient.cwd(zipPath);
System.out.println(ftpClient.printWorkingDirectory());
InputStream is =this.ftpClient.retrieveFileStream(remoteName);
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
System.out.println(ftpClient.printWorkingDirectory());
ZipInputStream zis = new ZipInputStream(is);
while((ze = zis.getNextEntry())!=null){
if(ze.isDirectory() ){
String[] folders = ze.getName().split("/");
for(int i=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(int i=0;i<folders.length;i++){
if(!ftpClient.changeWorkingDirectory(folders[i])){
if(i==(folders.length-1)){
OutputStream ops = 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 (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) throws InterruptedException {
String remoteName = "Fishing_Reel.zip";
String zipPath = "/model/AO/AOTR/PRODECT/";
new ZipFileTest(zipPath,remoteName);
}}
//----------------------------------我在调用 ftpClient.retrieveFileStream(remoteName) 这个方法之后
ftpClient.printWorkingDirectory() 这个方法就返回NULL,后面的在保存解压的文件时就会报java.lang.NullPointerException
解决方案 »
- MyEclipse8.5 struts 配置
- jsp+Access sql语句问题
- 求助:EJB问题 无法将 NULL 插入 ("CX01"."OUTPUT_BILL"."VALID_FLAG")
- j2sdk1.4.2 和 tomcat6.0不兼容,请问有没有patch包可以解决这个问题?
- struts2在 jsp页面用getText()设置参数的难题!发了好几帖了,难道没人能解决??
- 乱码问题
- 用hbm2java创建源文件失败,提示原因...
- 第二次发帖!!!
- 求OpenNMS的相关资料
- 进制转换
- hibernate问题
- 请教javascript得到一个blob类型的数据 如何显示成一张图片
//ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.completePendingCommand();
则ftpClient.printWorkingDirectory()输出正常目录,但是遇到稍大一点的ZIP文件就会假死这在。在网上查了一下要调用ftpClient.printWorkingDirectory()之前必需先调用InputStream.Close(),如果关了输入流那我下面的ZipInputStream就会报错。
通过调用这个方法retrieveFileStream(remoteName)得到一个文件输入流,在后面会把这个输入流放进
ZipInputStream zis = new ZipInputStream(is);
为了得到一个压缩文件流,担是我在InputStream is =this.ftpClient.retrieveFileStream(remoteName);这一行后面加上ftpClient.completePendingCommand();
ftpClient.printWorkingDirectory()就可以正常输出