qq347786639 2016-07-29 09:00 采纳率: 0%
浏览 2936

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条回答 默认 最新

  • 关注
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题