做了个程序,系统定时扫描一FTP服务器的某个文件夹,如果发现XML文件则取文件到本地处理。现在有个问题是,系统运行一段时间后,出现FTP无法连接的问题,提示为“打开文件太多”,请高手指教,部分代码入下:
try{
   //扫描服务器,检查是否有待处理的XML文件
   String[] files=FileAction.getFileNames(FTPConnection,serPath);
   if (files != null){
      for (int i=0;i<files.length();i++){
         //下载文件到本地
         FileAction.getFile(FTPConnection,serPath,file[i],localPath,file[i]);
         File file=new File (localPath + file[i]);
         try {
              //开始处理文件
              SAXReader reader = new SAXReader();
              Document OSS2WG_002 = reader.read(file);
              .....
              //处理文件结束
              FileAction.putFiles(...);//上传文件到处理成功目录
              FileAction.delFiles(...);//删除服务器上的原文件
              file.delete();//删除本地文件
         }catch{
              FileAction.putFiles(...);//上传文件到处理失败目录
              FileAction.delFiles(...);//删除服务器上的原文件
              file.delete();//删除本地文件
         }
      }
   }
}catch{
   System.out.println("sss");
}

解决方案 »

  1.   

    每次扫描以后关闭ftp连接,下次扫描的时候再连接,试试
      

  2.   

    怀疑是人的FTP连接没有关闭,而每次扫描时都打开新的连接
      

  3.   

    看你的程序好像是每次循环都要打开FTP连接?其实FTP连接只需在开始时打开一次
    在所有操作结束后再关闭就OK了和数据库连接一样
      

  4.   

    把这个类贴全请指点,FileAction为自己定义的一个类:
    public class startAutoJob extends java.util.TimerTask {
       private static FTPClient FTPConnection = null;
       public startAutoJob(){
           super();
           //创建FTP连接
           FTPConnection = FileAction.createFTPclient(ip,port,username,password);
        }
        public void run(){
           try{
               //扫描服务器,检查是否有待处理的XML文件
               String[] files=FileAction.getFileNames(FTPConnection,serPath);
               if (files != null){
                  for (int i=0;i<files.length();i++){
                    //下载文件到本地
                    FileAction.getFile(FTPConnection,serPath,file[i],localPath,file[i]);
                    File file=new File (localPath + file[i]);
                    try {
                       //开始处理文件
                       SAXReader reader = new SAXReader();
                       Document OSS2WG_002 = reader.read(file);
                       .....
                       //处理文件结束
                       FileAction.putFiles(...);//上传文件到处理成功目录
                       FileAction.delFiles(...);//删除服务器上的原文件
                       file.delete();//删除本地文件
                    }catch{
                       FileAction.putFiles(...);//上传文件到处理失败目录
                       FileAction.delFiles(...);//删除服务器上的原文件
                       file.delete();//删除本地文件
                    }
                 }
              }
          }catch{
             System.out.println("sss");
          }
    }