关于FTP获取文件,过滤器,下载文件0kb问题
FTPClient ftpClient = new FTPClient();
try {
ftpClient.connect("192.168.**.***", 21);//服务器ip 端口
ftpClient.login("username", "password");//用户名密码
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
// 限制缓冲区大小
ftpClient.setBufferSize(100000);
ftpClient.enterLocalPassiveMode();
ftpClient.setControlEncoding("UTF-8");//编码格式
} catch (Exception e) {
e.printStackTrace();
}
try {
//加过滤器
FTPFileFilter filter= new FTPFileFilter() {
@Override
public boolean accept(FTPFile file) {
return file.getName().contains("test");//重写过滤规则,这里只包含“test”的字段的文件
}
};
FTPFile[] allFile = ftpClient.listFiles("/",filter);
for(FTPFile a : allFile){
// String name = a.getName();
// name=new String(name.getBytes("GBK"),"iso-8859-1");
System.out.println(a.getName());
File file = new File("C:\Users\12345\documents\ftp", a.getName());
if (!file.getParentFile().exists()) {
boolean mkdirsResult = file.getParentFile().mkdirs();
if (!mkdirsResult) {
throw new RuntimeException("创建目录失败");
}
}
if (!file.exists()) {
boolean createFileResult = file.createNewFile();
if (!createFileResult) {
throw new RuntimeException("创建文件失败");
}
}
OutputStream outputStream = new FileOutputStream(file);
//下载文件有时候要指定编码格式,要不会下载为0kb。
ftpClient.retrieveFile(new String(a.getName().getBytes("GBK"),"ISO-8859-1"), outputStream);
boolean result = ftpClient.retrieveFile(a.getName(), outputStream);
outputStream.flush();
outputStream.close();
}
// 退出FTP
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
}