Android 는 ftp 방식 으로 파일 업로드 와 다운로드 기능 을 구현 합 니 다.
다음은 구체 적 인 인터페이스 실현:
그러면 ftp 와 관련 된 조작 은 ota.ftp 라 는 가방 에 봉 인 됐 습 니 다.어린이 신발 은 예제 코드 를 다운로드 하여 천천히 연구 할 수 있 습 니 다.그리고 이 건 ftp 서 비 스 를 이용 하면 저희 클 린 엔 드 에서 프로젝트 프로젝트 를 다시 가 져 와 야 합 니 다.ftp4j-1.7.2.jar 패키지.
여기 서 사용 하 는 논리 분석 을 하 겠 습 니 다.먼저 저희 프로젝트 프로젝트 FtpApplication 에서 이 OtaService 를 시작 합 니 다.그 중에서 OtaService 는 하나의 서비스 로 실 행 됩 니 다.이 서비스 에서 ftp 관련 인 터 페 이 스 를 봉 인 된 Download.java 를 받 아 ftp 파일 작업 을 합 니 다.관건 적 인 코드 는 다음 과 같 습 니 다.
public void startDownload() {
// TODO Auto-generated method stub
mDownLoad.start();
}
public void stopDownload() {
mDownLoad.stop();
}
public void cancel() {
mDownLoad.cancel();
}
public String getOldDate() {
return mDownLoad.getDatabaseOldDate();
}
public String getOldVersion() {
return mDownLoad.getDatabaseOldVersion();
}
public void checkVer(String serverRoot) {
// TODO Auto-generated method stub
mDownLoad = DownLoad.getInstance();
mDownLoad.setServeRoot(serverRoot);
mDownLoad.setFtpInfo(mApp.mFtpInfo);
mDownLoad.checkUpgrade();
}
FTPToolkit.java
package com.asir.ota.ftp;
import it.sauronsoftware.ftp4j.FTPClient;
import it.sauronsoftware.ftp4j.FTPFile;
import java.io.File;
import java.util.List;
import com.asir.ota.clinet.PathToolkit;
import com.asir.ota.ftp.DownLoad.MyFtpListener;
/**
* FTP
*
*/
public final class FTPToolkit {
private FTPToolkit() {
}
/**
* FTP
*
* @param host
* IP
* @param port
* ftp
* @param username
* ftp
* @param password
* ftp
* @return
* @throws Exception
*/
public static FTPClient makeFtpConnection(String host, int port,
String username, String password) throws Exception {
FTPClient client = new FTPClient();
try {
client.connect(host, port);
if(username != null && password != null) {
client.login(username, password);
}
} catch (Exception e) {
throw new Exception(e);
}
return client;
}
/**
* FTP , ,
*
* @param client
* FTP
* @param remoteFileName
* FTP
* @param localPath
*
* @throws Exception
*/
public static void download(FTPClient client, String remoteFileName,
String localPath, long startPoint, MyFtpListener listener) throws Exception {
String localfilepath = localPath;
int x = isExist(client, remoteFileName);
File localFile = new File(localPath);
if (localFile.isDirectory()) {
if (!localFile.exists())
localFile.mkdirs();
localfilepath = PathToolkit.formatPath4File(localPath
+ File.separator + new File(remoteFileName).getName());
}
if (x == FTPFile.TYPE_FILE) {
try {
if (listener != null)
client.download(remoteFileName, new File(localfilepath),
startPoint, listener);
else
client.download(remoteFileName, new File(localfilepath), startPoint);
} catch (Exception e) {
throw new Exception(e);
}
} else {
throw new Exception("the target " + remoteFileName + "not exist");
}
}
/**
* FTP FTP
*
* @param client
* FTP
* @param localfile
*
* @param remoteFolderPath
* FTP
* @throws Exception
*/
public static void upload(FTPClient client, File localfile,
String remoteFolderPath, MyFtpListener listener) throws Exception {
remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath);
try {
client.changeDirectory(remoteFolderPath);
if (!localfile.exists())
throw new Exception("the upload FTP file"
+ localfile.getPath() + "not exist!");
if (!localfile.isFile())
throw new Exception("the upload FTP file"
+ localfile.getPath() + "is a folder!");
if (listener != null)
client.upload(localfile, listener);
else
client.upload(localfile);
client.changeDirectory("/");
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* FTP FTP
*
* @param client
* FTP
* @param localfilepath
*
* @param remoteFolderPath
* FTP
* @throws Exception
*/
public static void upload(FTPClient client, String localfilepath,
String remoteFolderPath, MyFtpListener listener) throws Exception {
File localfile = new File(localfilepath);
upload(client, localfile, remoteFolderPath, listener);
}
/**
* FTP
*
* @param client
* FTP
* @param localFilePaths
*
* @param remoteFolderPath
* FTP
* @throws Exception
*/
public static void uploadListPath(FTPClient client,
List<String> localFilePaths, String remoteFolderPath, MyFtpListener listener) throws Exception {
remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath);
try {
client.changeDirectory(remoteFolderPath);
for (String path : localFilePaths) {
File file = new File(path);
if (!file.exists())
throw new Exception("the upload FTP file" + path + "not exist!");
if (!file.isFile())
throw new Exception("the upload FTP file" + path
+ "is a folder!");
if (listener != null)
client.upload(file, listener);
else
client.upload(file);
}
client.changeDirectory("/");
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* FTP
*
* @param client
* FTP
* @param localFiles
*
* @param remoteFolderPath
* FTP
* @throws Exception
*/
public static void uploadListFile(FTPClient client, List<File> localFiles,
String remoteFolderPath, MyFtpListener listener) throws Exception {
try {
client.changeDirectory(remoteFolderPath);
remoteFolderPath = PathToolkit.formatPath4FTP(remoteFolderPath);
for (File file : localFiles) {
if (!file.exists())
throw new Exception("the upload FTP file" + file.getPath()
+ "not exist!");
if (!file.isFile())
throw new Exception("the upload FTP file" + file.getPath()
+ "is a folder!");
if (listener != null)
client.upload(file, listener);
else
client.upload(file);
}
client.changeDirectory("/");
} catch (Exception e) {
throw new Exception(e);
}
}
/**
* FTP , (FTPFile.TYPE_DIRECTORY=1、FTPFile.TYPE_FILE=0、
* FTPFile.TYPE_LINK=2) , -1
*
* @param client
* FTP
* @param remotePath
* FTP
* @return ( 0, 1, 2), -1
*/
public static int isExist(FTPClient client, String remotePath) {
remotePath = PathToolkit.formatPath4FTP(remotePath);
FTPFile[] list = null;
try {
list = client.list(remotePath);
} catch (Exception e) {
return -1;
}
if (list.length > 1)
return FTPFile.TYPE_DIRECTORY;
else if (list.length == 1) {
FTPFile f = list[0];
if (f.getType() == FTPFile.TYPE_DIRECTORY)
return FTPFile.TYPE_DIRECTORY;
//
String _path = remotePath + "/" + f.getName();
try {
int y = client.list(_path).length;
if (y == 1)
return FTPFile.TYPE_DIRECTORY;
else
return FTPFile.TYPE_FILE;
} catch (Exception e) {
return FTPFile.TYPE_FILE;
}
} else {
try {
client.changeDirectory(remotePath);
return FTPFile.TYPE_DIRECTORY;
} catch (Exception e) {
return -1;
}
}
}
public static long getFileLength(FTPClient client, String remotePath) throws Exception {
String remoteFormatPath = PathToolkit.formatPath4FTP(remotePath);
if(isExist(client, remotePath) == 0) {
FTPFile[] files = client.list(remoteFormatPath);
return files[0].getSize();
}else {
throw new Exception("get remote file length error!");
}
}
/**
* FTP ,
*
* @param client
* FTP
* @return , , null true, false
*/
public static boolean closeConnection(FTPClient client) {
if (client == null)
return true;
if (client.isConnected()) {
try {
client.disconnect(true);
return true;
} catch (Exception e) {
try {
client.disconnect(false);
} catch (Exception e1) {
e1.printStackTrace();
return false;
}
}
}
return true;
}
}
로그 인,다운로드 시작,다운로드 취소,업그레이드 파일 버 전 번호 와 서버 버 전 검사 등 을 포함한다.다른 것 은 데이터베이스,SD 카드 파일 과 관련 된 작업 입 니 다.마지막 으로 다운로드 가 끝 난 후에 파일 에 대한 압축 을 풀 고 업그레이드 작업 을 해 야 합 니 다.이 부분 은 ZipExtractor.자바 와 OTAProvider.자바 에서 이 루어 집 니 다.예제 코드 다운로드 클릭
총결산
안 드 로 이 드 가 ftp 방식 으로 파일 업로드 와 다운 로드 를 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 안 드 로 이 드 ftp 파일 업로드 다운로드 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.