2014-11-26 4 views
0

ftp 서버의 파일을 나열하는이 작동 방법이 있지만 서버에서 CSV 파일 만 다운로드하도록 수정하고 싶습니다.FTP 서버에서만 CSV 파일을 반환하십시오.

private static void printFileDetails(FTPFile[] files) { 
     DateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     for (FTPFile file : files) { 
      String details = file.getName(); 
      if (file.isDirectory()) { 
       details = "[" + details + "]"; 
      } 
      details += "\t\t" + file.getSize(); 
      details += "\t\t" + dateFormater.format(file.getTimestamp().getTime()); 

      System.out.println(details); 
     } 
    } 

이것은 내가 뭘하려 : 다음은 메소드의 반환 CsvFiles []에서

private static ArrayList<String[]> CsvFiles(FTPFile[] files) 
      { 
       // get list of files on given path 
       for (FTPFile file : files) { 
       String details = file.getName(); 
       //String[] CsvFiles; 
       ArrayList<String> CsvFiles = new ArrayList<>(); 
       CsvFiles.add(details); 


       } 

       return CsvFiles[]; 
      } 

; netbeans는 '.class'라는 예상 오류를 보여 주지만 그게 유일한 문제는 아니며 전체적인 방법이 올바른지 확실하지 않습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

+0

당신은에 대한 루프 내부의 CsvFiles 배열을 만들 수 없습니다. 즉, 반복문을 반복 할 때마다 다시 작성한다는 의미입니다. – KeAn

답변

0

코드는 퍼즐처럼 보인다.

  1. ArrayList<String[]> 대신 ArrayList<String>을 돌려 주도록 선언해야한다고 생각합니다.
  2. ArrayList의 선언은 루프 외부에 있어야합니다.
  3. 메소드 및 로컬 변수에 대해 동일한 이름을 사용하지 마십시오. 이 같은

떨어지게은 :

private static ArrayList<String> getCsvFiles(FTPFile[] files){ 
     ArrayList<String> csvFiles = new ArrayList<>(); 
     for (FTPFile file : files) { 
     String details = file.getName(); 
     //if file is csv 
     csvFiles.add(details); 
     } 
     return csvFiles; 
    } 
+0

고마워 Retroq :) 이제 작동 중입니다 :) 그리고 csv는 아래의 주석에서 KeAn이 제안한 if 문을 추가하여 작동합니다. – Shahnawaz

+0

모범 사례를 따르려면'ArrayList csvFiles = new ArrayList <>();'를'List csvFiles = new ArrayList <>();'로 변경하는 것이 좋습니다. – carlspring

0

자세한 내용은 .endswith (".csv")를 참조하십시오.

(주 !! 유엔 테스트 코드)

if(details.endsWith(".csv")) { 
    CsvFiles.add(details); 
} 
코드와

(일부는 정리가) :

 private static ArrayList<String> CsvFiles(FTPFile[] files) 
     { 
      ArrayList<String> CsvFiles = new ArrayList<>(); 
      // get list of files on given path 
      for (FTPFile file : files) 
      { 
       if(file.getName().endsWith(".csv")) { 
        CsvFiles.add(details); 
       } 
      } 
      return CsvFiles; 
     } 
+0

감사합니다.하지만 자세한 내용도 함께 신고해야합니다. 또한 반환 CsvFiles [] 여전히 '.class'예상 된 오류가 표시됩니다. – Shahnawaz

+0

@Shahnawaz 글쎄요 중요한 것은 당신이 그것을 풀 었다는 것입니다. – KeAn

4

우리는 우리가 나열 할 파일을 필터링하는 FTPFileFilter을 사용할 수 있습니다

FTPFileFilter filter=new FTPFileFilter(){ 
     @Override 
     public boolean accept(FTPFile ftpFile) { 
      return (ftpFile.isFile() && ftpFile.getName().endsWith(".csv")); 
     } 
    }; 
FTPFile[] files=sessionForFtp.Files("directoryName", filter); 
관련 문제