Java中使用FTPClient读取ftp文件过程中无法修改读取文件的文件名

使用FTPClient读取ftp上的某个txt文件内容,存到数据库,然后再加读取到的txt文件重命名,在重命名过程失败,代码如下
public void readAndInsert(){
LOGGER.info("开始读取各场景投诉类型并存入数据库");

//ftp配置信息读取
String host = ConfigUtil.getValue("zhzd.ftp.host");
String userName = ConfigUtil.getValue("zhzd.ftp.username");
String password = ConfigUtil.getValue("zhzd.ftp.password");

//ftp连接
FTPClient ftp = new FTPClient();
try {
ftp.connect(host);
ftp.login(userName,password);
} catch (Exception e) {
LOGGER.info("投诉工单类型:ftp连接异常...");
e.printStackTrace();
}

//ftp文件读取
FTPFile[] files = null;
String targetFileName = ""; //目标文件名
try {
files = ftp.listFiles();
int length = files.length;
int fileNum = 0; //txt文件个数
List fileList = new ArrayList(); //存储所有txt文件名
for(int i=0;i < length ;i++){
if(files[i].getName().contains("txt")){
fileList.add(files[i].getName());
fileNum++;
};
}
//ftp文件操作-获取目标文件,其他文件放入old文件夹
if(fileNum == 0){ //没有txt文件,不更新
LOGGER.info("投诉工单类型:FTP下没有txt文件...");
ftp.disconnect();
return;
}else if(fileNum == 1){ //只有一个txt,不读取,不更新
LOGGER.info("投诉工单类型:FTP下只有一个txt文件,今日数据库不需更新...");
ftp.disconnect();
return;
}else{ //两个或者多个,取日期最大的那个
int[] dateArr = new int[fileNum];
for(int i=0;i dateArr[i] = Integer.parseInt(fileList.get(i).split("_")[3].substring(0, 8));
}
Arrays.sort(dateArr);
//留下日期最大的文件,其余的都放入old文件夹
/***********************其他没有读取的文件可以重命名(rename)******************************/
for(int i=0;i if(fileList.get(i).contains(String.valueOf(dateArr[fileNum-1]))){
targetFileName = fileList.get(i);
LOGGER.info("投诉工单类型:目标文件为{}...", targetFileName);
fileList.remove(i);
break;
}
}
//移动文件
Iterator it = fileList.iterator();
String backName = "";
while(it.hasNext()){
backName = it.next();
ftp.rename(backName,"old/"+backName);
LOGGER.info("投诉工单类型:文件{}放入old文件夹...",backName);
}
}
} catch (Exception e) {
LOGGER.info("投诉工单类型:ftp文件列表读取异常...");
e.printStackTrace();
}

//数据库操作
if(!"".equals(targetFileName)){
//删表
dnTimerDao.deleteSendType();

//读文件
InputStreamReader read = null;
try {
read = new InputStreamReader(ftp.retrieveFileStream(targetFileName),"GBK");
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
String[] str = null;
while ((lineTxt = bufferedReader.readLine()) != null) {
str = lineTxt.split("");
//存入数据库
if(str.length == 7){
dnTimerDao.insertSendType(str);
}else{
throw new IOException("文件内容读取异常!");
}
}
read.close();
/*******************我用字符流读取的文件重命名失败,我将字符流、
字节流、输入流等都关闭了,也无法重命名*********************/
ftp.rename(targetFileName,"old/"+targetFileName);
LOGGER.info("完成各场景投诉类型的读取和存入");
} catch (UnsupportedEncodingException e) {
LOGGER.info("投诉工单类型:文件编码异常...");
e.printStackTrace();
} catch (IOException e) {
LOGGER.info("投诉工单类型:文件内容的读取异常...");
e.printStackTrace();
} finally {
if(read != null){
try {
read.close();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
ftp.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}

1个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐