FTP 호스트에서 XX 데이터 파일을 가져가 라.
수만 단지 개념, 수만 또는 수백만의 동일한 데이터를 나타내는 이다.
이 공유 분산된 수집 및 저장. 데이터의 양이 매우 큰, 분산된 처리, 공유 하는 시간에 있을 것입니다 만약 내가이 경험을 고려할 수 있습니다 경우 컴퓨터 처리 데이터에는 포함 되지 않습니다.
1, FTP 도구 응용 프로그램
2, 수만 FTP 코어-의 핵심 부분 파일,이 작품 만큼 열 디렉터리 이루어집니다, 기본적으로 성능이 너무 큰 문제가 되지 않습니다.
파일을 FTP 명령 "NLST" 아파치를 보낼 수 있습니다.
# FTP 열 디렉터리 먼저, 환경 변수의 구성 명령을 실행 하 고 기본 열 디렉터리 메서드 NLST를 구성 하지는 않습니다.
[자바]
# ds_list_cmd NLST =
공용 http://www.aliyun.com/zixun/aggregation/19352.html "> sendcommandandlisttofile (문자열 명령, 문자열 파일 Localpathname)는 IOException을 throw
{
시도 없음
반환 client.createfile (명령, localpathname);
catch (e IOException) 없음
Log.error (e);
새로운 IOException을 throw ("명령" 명령 + "올바르지 않습니다");
}
}
물론 다른 형태 이어야 한다, 공부할 수 있는 우리는
데이터의 금액 이상의 100000 수준 하지 다음 이러한 방법으로, 경우에 사용 해야 단어를 사용 하 여 찾기 죽음 = =
ftpfile dirlist = Client.listfiles ();
3, 다운로드 파일 이름을 읽고 파일에서 일괄 처리. 처리, 메모리에 로드 하거나 파일을 다운로드 하는 파일 이름을 읽기 로드 되지 않는 모든 데이터 메모리에 많은 것 들이 잘못가 면
왜 일괄 처리를 분할 하려면?
위에 나열 된 디렉터리 파일에 1 G 크기 때문에 많은 양의 데이터, 1000W 레코드 하는 경우,
4, 파일 다운로드---파일의 중단점에의 핵심 코드 계속 전송, FTP 파일의 크기 및 판단, 다음 FTP를 사용 하 여 전달 함수를 계속 중단점을 제공 하는 로컬 파일의 크기
다운로드 파일의 이진 형식 이어야
수동 모드를 Client.enterlocalpassivemode () //set
Ftpclient.binary (); 이진 모드를 사용 해야 합니다.
[자바]
/ * * 필요한 파일을 다운로드 및 중단점의 계속을 지원, 다운로드 및 반복 수 없습니다 ftp 파일을 삭제
* @param 경로 원격 파일
* @param localpath 로컬 파일
* @param registerfilename 로그 파일 이름 디렉터리
* @param 크기 업로드 파일
* @return 사실 다운로드 및 삭제 성공
* @throws IOException
* @throws 예외
*/
공공 부울 다운로드 (경로 이름 문자열, 문자열 localpath) throw IOException 없음
부울 플래그 = false;
파일을 파일 = 새로운 파일 (localpath + ". tmp"); //Set 임시 파일
FileOutputStream = null;
시도 없음
수동 모드를 Client.enterlocalpassivemode () //set
Client.setfiletype (Ftp.binary_file_type);//set 이진 전송
경우 (lff.getisfileexists (파일)) {//Judge 있는지 로컬 파일, 그것은 존재 하 고 ftp 파일의 길이 보다 작은 경우, 중단점이 갱신;
긴 사이즈 = This.getsize (pathName);
긴 localfilesize = lff.getsize (파일);
경우 (localfilesize > 크기) 없음
반환 허위;
}
= 새로운 FileOutputStream (파일, true);
Client.setrestartoffset (localfilesize);
플래그 = Client.retrievefile (새로운 문자열 (Pathname.getbytes (), client.getcontrolencoding ()), 밖으로);
Out.flush ();
} 다른 없음
밖으로 = new FileOutputStream (파일);
플래그 = Client.retrievefile (새로운 문자열 (Pathname.getbytes (), client.getcontrolencoding ()), 밖으로);
Out.flush ();
}
} catch 없음; (IOException e)
Log.error (e);
Log.error ("파일 다운로드 오류!");
던져 전자;
} 마지막으로 없음
시도 없음
경우 (null! 밖으로 =)
Out.close ();
경우 (플래그)
Lff.rename (파일, localpath);
} catch 없음; (IOException e)
던져 전자;
}
}
반환 깃발;
}
/**
파일 길이 얻을
* @param filenamepath 기본 파일
* @return
* @throws IOException
*/
공개 긴 GetSize (문자열 filenamepath) throw ioexception 없음
Ftpfile ftp client.listfiles = (새로운 문자열 (Filenamepath.getbytes (), client.getcontrolencoding ());
Ftp.length==0을 반환? 0:ftp [0].getsize ();
}
파일 크기 다운로드 하는 경우 로컬 파일 다운로드 경우 감지 합니다.
/**
* 로컬 파일에 대 한 가져오기 파일의 크기
* @param 파일
* @return
*/
공개 긴 getsize (파일) 없음
긴 크기 = 0;
경우 (getisfileexists (파일)) 없음
크기 = File.length ();
}
반환 크기;
}
5, 그 죽은 스레드 및 적시 올려 온라인 모니터링을 할 몇 가지 처리, 100 개 이상의 스레드까지 실행 프로그램 감지할 수 있기 때문에.
T.setuncaughtexceptionhandler (새로운 ThreadException (exlist));
원리: 각 스레드, 다이 정보에 해당 하는 스레드를 목록에 추가 하는 경우에 Uncaughtexceptionhandler를 추가 하 고 주 스레드 가끔 목록, 스캔 하는 동안에 데이터가 있을 경우, 직접 그것을 실행 하는 스레드를 다시
6, 프로그램은 메모리 상주 하는 경우에 사용 되지 않는 FTP 연결을 마지막으로 종료를 잊지 마세요
7, 대형 데이터베이스 수집 프로그램 계정 한 가지 디스크 공간 전체 처리에 걸릴 해야 합니다.
디스크 공간에 대 한 자바 가상 기계는 영어 환경 리눅스 엑스 기계 일반 보고서 전체
파일 시스템에 충분 한 공간이 되지 않습니다.
일반 보고서 "디스크 공간 전체" 중국 환경에서
다음 코드를 사용 하 여 확인 하 수 있습니다.
[자바]
파일 시스템에 충분 한 공간을 리눅스 Aix 거기으로
창의 파일 시스템에 충분 한 공간 아니다.
경우 (E.tostring (). 포함 ("충분 한 공간") | | E.tostring (). 포함 ("디스크 공간 전체")
{
Log.error ("채널" + channel_name + "않습니다 충분 한 공간이 디스크에");
Runtime.getruntime (). 출구 (0);
}