windows下文件的目录定义可以直接以'/'开头,但linux不可以,否则changeWorkingDirectory会失效,导致文件会被放在根目录下;
windows的uploadPath: public static final String prefixPath = "/file/yyyyMMdd";
linux的uploadPath: public static final String prefixPath = "file/yyyyMMdd";
windows可以一次创建多级目录,linux只可以一级一级的创建
String uploadPath = prefixPath + simpleDateFormat.format(new Date());
if(!ftpClient.changeWorkingDirectory(uploadPath)) {
ftpClient.makeDirectory(prefixPath);
if(!ftpClient.changeWorkingDirectory(uploadPath)){
ftpClient.makeDirectory(uploadPath);
ftpClient.changeWorkingDirectory(uploadPath);
}
}
public InputStream getInputStream(String remoteFilePath, String fileName, FTPClient ftpClient) {
try {
//成功跳入
if(ftpClient.changeWorkingDirectory(remoteFilePath)) {
FTPFile[] fs = ftpClient.listFiles();
for(FTPFile ff : fs){
if(ff.getName().equals(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"))){
return ftpClient.retrieveFileStream(ff.getName());
}
}
//未找到,跳回父级目录
for (int i = 0; i < 2; i++) {
ftpClient.changeToParentDirectory();
fs = ftpClient.listFiles();
for(FTPFile ff : fs){
if(ff.getName().equals(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"))){
return ftpClient.retrieveFileStream(ff.getName());
}
}
}
} else {
//还在根目录
FTPFile[] fs = ftpClient.listFiles();
for(FTPFile ff : fs){
if(ff.getName().equals(new String(fileName.getBytes("UTF-8"),"ISO-8859-1"))){
return ftpClient.retrieveFileStream(ff.getName());
}
}
}
} catch (Exception e) {
e.printStackTrace();
logger.debug("本地文件下载失败!", e);
}
return null;
}