jar包链接https://download.csdn.net/download/weixin_40391500/10629775
ftp服务器
不设置读写权限是不能上传的文件的
private static String hostip = ""; // 本机IP
public static final int PORT = 21;
// sd卡目录
@SuppressLint("SdCardPath")
// public static final String dir = Environment.getExternalStorageDirectory().getAbsolutePath();
public static final String dir = "/mnt/sdcard/";
public static final String dirname = dir + "face/";
// ftp服务器配置文件路径
private static final String filename = dirname + "users.properties";
private static FtpServer mFtpServer = null;
private String properties ="ftpserver.user.admin.userpassword=E10ADC3949BA59ABBE56E057F20F883E\r\n
ftpserver.user.admin.homedirectory=/mnt/sdcard/ftp\r\n
ftpserver.user.admin.enableflag=true\r\n
ftpserver.user.admin.writepermission=true\r\n
ftpserver.user.admin.maxloginnumber=4\r\n
ftpserver.user.admin.maxloginperip=4\r\n
ftpserver.user.admin.idletime=3000\r\n
ftpserver.user.admin.uploadrate=4800\r\n
ftpserver.user.admin.downloadrate=4800\r\n";
public synchronized static FTPServerUtils getIntance(){
if(utils == null){
utils = new FTPServerUtils();
}
return utils;
}
/**
* 创建服务器配置文件
*/
public void creatDirsFiles(){
try {
File dir = new File(dirname);
if (!dir.exists()) {
dir.mkdirs();
}
FileOutputStream fos = null;
File sourceFile = new File(filename);
if (sourceFile.exists()){
sourceFile.delete();
}
fos = new FileOutputStream(sourceFile);
fos.write(properties.getBytes());
if (fos != null) {
fos.close();
}
}catch (Exception e){
e.printStackTrace();
}
}
/**
* 开启FTP服务器
*
* @param hostip 本机ip
*/
public void startFtpServer(final String hostip) {
new Thread(new Runnable() {
@Override
public void run() {
// if (!new File(filename).exists()){
// creatDirsFiles();
// }
creatDirsFiles();
FtpServerFactory serverFactory = new FtpServerFactory();
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
File files = new File(filename);
//设置配置文件
userManagerFactory.setFile(files);
serverFactory.setUserManager(userManagerFactory.createUserManager());
// 设置监听IP和端口号
ListenerFactory factory = new ListenerFactory();
factory.setPort(PORT);
factory.setServerAddress(hostip);
serverFactory.addListener("default", factory.createListener());
BaseUser user = new BaseUser();
//设置权限
List authorities = new ArrayList<>();
authorities.add(new WritePermission());
user.setAuthorities(authorities);
//设置用户名密码
user.setName("admin");
user.setPassword("123456");
user.setEnabled(true);
user.setMaxIdleTime(3000);
user.setHomeDirectory(dirname);
try {
serverFactory.getUserManager().save(user);
} catch (FtpException e) {
e.printStackTrace();
}
if(mFtpServer != null)
{
mFtpServer.stop();
}
// start the server
mFtpServer = serverFactory.createServer();
try {
mFtpServer.start();
// FTPClientUtils.getIntance().ftpConnet();
LogUtils.printLog("开启了FTP服务器 ip = " + hostip);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
/**
* 关闭FTP服务器
*/
public void stopFtpServer() {
new Thread(new Runnable() {
@Override
public void run() {
if (mFtpServer != null) {
mFtpServer.stop();
mFtpServer = null;
LogUtils.printLog("关闭了FTP服务器 ip = " + hostip);
}
}
}).start();
}
/**
* 获取本机ip
*/
public String getLocalIpAddress() {
try {
List interfaces = Collections
.list(NetworkInterface.getNetworkInterfaces());
for (NetworkInterface intf : interfaces) {
List addrs = Collections.list(intf
.getInetAddresses());
for (InetAddress addr : addrs) {
if (!addr.isLoopbackAddress()) {
String sAddr = addr.getHostAddress().toUpperCase();
boolean isIPv4 = Isipv4(sAddr);
if (isIPv4) {
return sAddr;
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public void onStartServer() {
hostip = getLocalIpAddress();
LogUtils.printLog("获取本机IP = " + hostip);
startFtpServer(hostip);
}
public static boolean Isipv4(String ipv4) {
if (ipv4 == null || ipv4.length() == 0) {
return false;//字符串为空或者空串
}
//因为java doc里已经说明, split的参数是reg, 即正则表达式, 如果用"|"分割, 则需使用"\\|"
String[] parts = ipv4.split("\\.");
if (parts.length != 4) {//分割开的数组根本就不是4个数字
return false;
}
for (int i = 0; i < parts.length; i++) {
try {
int n = Integer.parseInt(parts[i]);
//数字不在正确范围内
if (n < 0 || n > 255) {
return false;
}
} catch (NumberFormatException e) {//转换数字不正确
return false;
}
}
return true;
}
ftp客户端
public void ftpConnet(){
new Thread(new Runnable() {
@Override
public void run() {
try {
client = new FTPClient();
String host = "192.168.1.114";
client.connect(host, 21);
client.login("admin", "123456");
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
public void ftpClose(){
new Thread(new Runnable() {
@Override
public void run() {
try {
if (client !=null)
client.disconnect(false);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
/***下载文件***/
public void download(){
new Thread(new Runnable() {
@Override
public void run() {
try {
if (client != null){
String url = "/11.jpg";//服务器上的文件
PrintlnLog.printLog("-----------------url=" + url);
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/ftp");
if (!file.exists()){
file.mkdirs();
}
File file1 = new File(file, "11.jpg");
client.download(url, file1, new FTPDataTransferListener() {
@Override
public void started() {
PrintlnLog.printLog("-----------------started");
}
@Override
public void transferred(int i) {
// PrintlnLog.printLog("-----------------transferred");
}
@Override
public void completed() {
PrintlnLog.printLog("-----------------completed");
}
@Override
public void aborted() {
PrintlnLog.printLog("-----------------aborted");
}
@Override
public void failed() {
PrintlnLog.printLog("-----------------failed");
}
});
}else {
PrintlnLog.printLog("-----------------client=null");
// ftpConnet();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
/***上傳文件***/
public void upload(){
new Thread(new Runnable() {
@Override
public void run() {
try {
if (client != null){
File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/12.jpg");
if (!file.exists()){
file.mkdirs();
}
client.createDirectory("file");
client.changeDirectory("file");
client.upload(file, new FTPDataTransferListener() {
@Override
public void started() {
PrintlnLog.printLog("-----------------started");
}
@Override
public void transferred(int i) {
// PrintlnLog.printLog("-----------------transferred");
}
@Override
public void completed() {
PrintlnLog.printLog("-----------------completed");
}
@Override
public void aborted() {
PrintlnLog.printLog("-----------------aborted");
}
@Override
public void failed() {
PrintlnLog.printLog("-----------------failed");
}
});
client.changeDirectory("/");
}else {
PrintlnLog.printLog("-----------------client=null");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}