<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:runner:0.5@aar" level="project" />\r
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test:exposed-instrumentation-api-publish:0.5@aar" level="project" />\r
<orderEntry type="library" scope="TEST" name="Gradle: com.android.support.test.espresso:espresso-idling-resource:2.2.2@aar" level="project" />\r
+ <orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\ftp4j-1.7.2.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\LauncherCtrl.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: __local_aars__:D.\Snicker\icsupport\app\libs\okio-2.4.3.jar:unspecified@jar" level="project" />\r
<orderEntry type="library" name="Gradle: com.android.support:support-annotations:25.1.0@jar" level="project" />\r
<orderEntry type="library" name="Gradle: com.kymjs.rxvolley:rxvolley:1.1.3@aar" level="project" />\r
<orderEntry type="library" name="Gradle: io.reactivex:rxandroid:1.1.0@aar" level="project" />\r
<orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
- <orderEntry type="module" module-name="dNSCache" />\r
</component>\r
</module>
\ No newline at end of file
public static String work_mode = "2@1";\r
\r
private static final int yunosuuid = 0;\r
- \r
+\r
+\r
+ public static final String DefaultHost="watch.jiai.pro";\r
+ public static final int DefaultPort=8090;\r
+\r
+ public static final String DefaultLogFtpServer="icfota.snicker.com.cn";\r
+ public static final String DefaultLogFtpUser="ftpuser";\r
+ public static final String DefaultLogFtpPWD="iclog";\r
+\r
+\r
+ public static final String DefaultWiFiSSID="Xplay6";\r
+ public static final String DefaultWiFiPWD="87654321";\r
+\r
static {\r
\r
}\r
\r
final static String KeyHeartBeatCycle="ServerHeartBeatCycle";\r
\r
+\r
+\r
+ final static String KeyLogFtpServer="FtpServerHost";\r
+ final static String KeyLogFtpUser="FtpServerUser";\r
+ final static String KeyLogFtpPWD="FtpServerPWD";\r
+\r
+\r
+ final static String KeyWiFiSSID="WiFiSSID";\r
+ final static String KeyWiFiPasswd="WiFiPWD";\r
+\r
+\r
+ public static String getWiFiSSID(Context context){\r
+ return SharPreferenceUtil.getPrefString(context,KeyWiFiSSID,DefaultWiFiSSID);\r
+ }\r
+\r
+ public static void setWiFiSSID(Context context,String ssid){\r
+ SharPreferenceUtil.setPrefString(context,KeyWiFiSSID,ssid);\r
+ }\r
+\r
+ public static String getWiFiPasswd(Context context){\r
+ return SharPreferenceUtil.getPrefString(context,KeyWiFiPasswd,DefaultWiFiPWD);\r
+ }\r
+\r
+ public static void setWiFiPasswd(Context context,String pwd){\r
+ SharPreferenceUtil.setPrefString(context,KeyWiFiPasswd,pwd);\r
+ }\r
+\r
+\r
+ public static String getFtpUser(Context context){\r
+ return SharPreferenceUtil.getPrefString(context,KeyLogFtpUser,DefaultLogFtpUser);\r
+ }\r
+\r
+ public static void setFtpUser(Context context,String user){\r
+ SharPreferenceUtil.setPrefString(context,KeyLogFtpUser,user);\r
+ }\r
+\r
+ public static String getFtpServer(Context context){\r
+ return SharPreferenceUtil.getPrefString(context,KeyLogFtpServer,DefaultLogFtpServer);\r
+ }\r
+\r
+ public static void setFtpServer(Context context,String host){\r
+ SharPreferenceUtil.setPrefString(context,KeyLogFtpServer,host);\r
+ }\r
+\r
+ public static String getFtpPWD(Context context){\r
+ return SharPreferenceUtil.getPrefString(context,KeyLogFtpPWD,DefaultLogFtpPWD);\r
+ }\r
+ public static void setFtpPWD(Context context,String PWD){\r
+ SharPreferenceUtil.setPrefString(context,KeyLogFtpPWD,PWD);\r
+ }\r
+\r
+\r
+\r
+\r
+\r
public static void setAlarmCycle(Context context, int cycle){\r
SharPreferenceUtil.setPrefInt(context,KeyAlarmCycle,cycle);\r
}\r
import com.enqualcomm.support.utils.DeviceInfoUtil;\r
import com.enqualcomm.support.utils.Logger;\r
import com.enqualcomm.support.utils.ServiceUtil;\r
+import com.enqualcomm.support.utils.TimeUtil;\r
+import com.enqualcomm.support.utils.Util;\r
+import com.enqualcomm.support.utils.ftpUtils;\r
\r
+import java.io.File;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
import java.util.ArrayList;\r
import java.util.Iterator;\r
import java.util.concurrent.TimeUnit;\r
Logger.i(sms + " len " + tmp.length);\r
if (tmp.length == 2) {\r
if (tmp[1].equals("reset#")) {\r
- Config.setProtocolServerHost(mContext, Runtime.DefaultHost);\r
- Config.setProtocolServerAddr(mContext, "", Runtime.DefaultPort);\r
- reply = "reset ServerIP to " + Runtime.DefaultHost + ":" + Runtime.DefaultPort + " success! ";\r
+ Config.setProtocolServerHost(mContext, Config.DefaultHost);\r
+ Config.setProtocolServerAddr(mContext, "", Config.DefaultPort);\r
+ reply = "reset ServerIP to " + Config.DefaultHost + ":" + Config.DefaultPort + " success! ";\r
Config.loadServerSettings(runtime);\r
CoreService.getInstance().disconnect_server();\r
CoreService.getInstance().ReConnectToServer();\r
} else {\r
sendSMS(phonenumber, "skipmovecheck format error!");\r
}\r
- } else {\r
+ }else if(sms.startsWith("#connectwifi#=")){\r
+ String tmp[] = sms.split("=");\r
+ if (tmp.length == 2) {\r
+ if (tmp[1].equals("current")) {\r
+ sendSMS(phonenumber, "SkipMoveCheck " + LocationClient.getSkipMoveCheck() + "!");\r
+ } else if (tmp[1].equals("reset")) {\r
+ LocationClient.setSkipMoveCheck(true);\r
+ sendSMS(phonenumber, "set SkipMoveCheck " + LocationClient.getSkipMoveCheck() + " success!");\r
+ } else {\r
+\r
+\r
+ sendSMS(phonenumber, "skipmovecheck format error!");\r
+ }\r
+ } else {\r
+ sendSMS(phonenumber, "skipmovecheck format error!");\r
+ }\r
+ }else if(sms.startsWith("#logctl#=")){\r
+ String tmp[] = sms.split("=");\r
+ if (tmp.length == 2) {\r
+ if (tmp[1].equals("current")) {\r
+ sendSMS(phonenumber, "Current FtpLogServer " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));\r
+ }else if (tmp[1].equals("reset")) {\r
+\r
+ Config.setFtpServer(mContext, Config.DefaultLogFtpServer);\r
+ Config.setFtpUser(mContext, Config.DefaultLogFtpUser);\r
+ Config.setFtpPWD(mContext, Config.DefaultLogFtpPWD);\r
+ sendSMS(phonenumber, "reset FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));\r
+ }else if (tmp[1].startsWith("upload,")){\r
+\r
+ String cmdl[] = tmp[1].split(",");\r
+ if (cmdl.length == 2) {\r
+ String logfile=cmdl[1];\r
+\r
+ if (logfile.isEmpty()|| logfile.equals("all")){\r
+ String filelist[]={"APILog","GPS","LocationAlarm","Battery","log"};\r
+// String filelist[]={"APILog","LocationAlarm","Battery"};\r
+ String time=TimeUtil.getSystemTime3();\r
+ StringBuilder sb=new StringBuilder();\r
+ Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ sendSMS(phonenumber, "start Upload allLogfile [APILog log GPS LocationAlarm Battery] to " + Config.getFtpServer(mContext));\r
+ for (String file : filelist) {\r
+\r
+ if (Util.LogfileExist(runtime, file)) {\r
+\r
+ String filepath = Util.getLogfilePath(runtime, file);\r
+ URL serverurl = null;\r
+ try {\r
+ serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), time, file));\r
+ } catch (MalformedURLException e) {\r
+ e.printStackTrace();\r
+ }\r
+ if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
+ sb.append(" ").append(file);\r
+ Logger.i("Upload file "+file+" success! ");\r
+ }else{\r
+ Logger.i("Upload file "+file+" failed! ");\r
+\r
+ }\r
+\r
+\r
+ }\r
+ }\r
+\r
+ sendSMS(phonenumber, "Upload allLogfile [" + sb.toString() + "] to " + Config.getFtpServer(mContext));\r
+ }\r
+ });\r
+ }else{\r
+ Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
+ public void call(Long param1Long) {\r
+ String filepath = Util.getLogfilePath(runtime, logfile);\r
+ URL serverurl = null;\r
+ try {\r
+ serverurl = new URL(Util.getServerLogfilePath(Config.getFtpServer(mContext), TimeUtil.getSystemTime3(), logfile));\r
+ } catch (MalformedURLException e) {\r
+ e.printStackTrace();\r
+ }\r
+ if (Util.LogfileExist(runtime, logfile)) {\r
+\r
+ sendSMS(phonenumber, "start Upload " + logfile + " to " + Config.getFtpServer(mContext) +" ...");\r
+ if( ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
+ sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) +" success!");\r
+ }else{\r
+ sendSMS(phonenumber, "Upload " + logfile + " to " + Config.getFtpServer(mContext) +" failed!");\r
+ }\r
+ } else {\r
+ sendSMS(phonenumber, logfile + " not exist !");\r
+ }\r
+ }\r
+ });\r
+ }\r
+\r
+// sendSMS(phonenumber, "upload FtpLogServer to " + Config.getFtpServer(mContext) + ", user " + Config.getFtpUser(mContext) + ", pwd " + Config.getFtpPWD(mContext));\r
+\r
+ }else{\r
+ sendSMS(phonenumber, "upload logfile format error!");\r
+ }\r
+\r
+ } else {\r
+ String cmdl[] = tmp[1].split(",");\r
+ if (cmdl.length == 3) {\r
+ Config.setFtpServer(mContext,cmdl[0]);\r
+ Config.setFtpUser(mContext,cmdl[1]);\r
+ Config.setFtpPWD(mContext,cmdl[2]);\r
+ sendSMS(phonenumber, "Set FtpLogServer to "+ Config.getFtpServer(mContext)+ ", user "+Config.getFtpUser(mContext)+", pwd "+Config.getFtpPWD(mContext));\r
+\r
+ } else {\r
+ sendSMS(phonenumber, "set LogFtpServer format error! "+sms);\r
+ }\r
+ }\r
+ } else {\r
+ sendSMS(phonenumber, "set LogFtp ctl format error! "+sms);\r
+ }\r
+\r
+ }else {\r
return false;\r
}\r
return true;\r
\r
private String haveTry;\r
\r
- public static final String DefaultHost="watch.jiai.pro";\r
- public static final int DefaultPort=8090;\r
-\r
private String host = "watch.jiai.pro"; //118.178.155.223\r
\r
private String srvIP = "118.178.155.223";//"39.98.94.164";\r
import com.enqualcomm.support.bean.Runtime;\r
\r
import static android.content.Context.BATTERY_SERVICE;\r
+import static android.os.BatteryManager.EXTRA_LEVEL;\r
+import static android.os.BatteryManager.EXTRA_SCALE;\r
+import static android.os.BatteryManager.EXTRA_VOLTAGE;\r
import static com.enqualcomm.support.Constants.ACTION_BATTERY_LOW_MSG;\r
\r
public class BatteryUtil {\r
} else {\r
BatteryUtil.this.mRuntime.setBatterychanging(false);\r
}\r
- int i = param1Intent.getIntExtra("level", 0) * 100 / param1Intent.getIntExtra("scale", 100);\r
- Logger.i("BatteryLevel "+i);\r
- if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"Battery","BatteryLevel "+i);\r
+ int i = param1Intent.getIntExtra(EXTRA_LEVEL, 0) * 100 / param1Intent.getIntExtra(EXTRA_SCALE, 100);\r
+ // 当前电池电压\r
+ int batteryVolt = param1Intent.getIntExtra(EXTRA_VOLTAGE, -1);\r
+ Logger.i("BatteryLevel "+i + " BatteryVotage "+batteryVolt);\r
+ if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(mRuntime.getCacheDir(),"Battery","BatteryLevel "+i + " BatteryVotage "+batteryVolt);\r
if (i >= 100) {\r
Runtime runtime = BatteryUtil.this.mRuntime;\r
StringBuffer stringBuffer = BatteryUtil.this.mBuffer;\r
return str2;\r
}\r
\r
+ public static String getModule(){\r
+\r
+ return Build.MODEL;\r
+ }\r
+\r
+\r
/**\r
* 得到当前应用版本名称的方法\r
*\r
\r
SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context);\r
return new StringBuilder()\r
- .append(TimeUtil.getLocalTime2()).append(" ").append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context))\r
- .append(SimSignalUtil.hasSimCard(runtime.getContextProxy().context)?"\n SIM ":" NoSIM ")\r
+ .append(TimeUtil.getLocalTime2()).append(" ").append(DeviceInfoUtil.getSWVersionDisplayName()).append("\n")\r
+ .append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context))\r
+ .append(SimSignalUtil.hasSimCard(runtime.getContextProxy().context)?" SIM ":" NoSIM ")\r
.append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown"))\r
.append(" [").append(runtime.getSignalStrength()).append(",Mini:").append(SimSignalUtil.getMinSignalStrength(sim.getNetworkType())).append("]")\r
.append("\n KeepAlive ").append(KeepAlive.isConnected).append(" , HBcycle ").append(runtime.getHeartBeatCycle())\r
\r
SimSignalUtil sim=SimSignalUtil.getInstance(runtime.getContextProxy().context);\r
return new StringBuilder()\r
+ .append(DeviceInfoUtil.getSWVersionDisplayName()).append("\n")\r
.append(DeviceInfoUtil.getVersionCode(runtime.getContextProxy().context))\r
.append(SimSignalUtil.hasSimCard(runtime.getContextProxy().context)?" ":" NoSIM ")\r
.append(sim.getNetworkType()==SimSignalUtil.IS_2G?"2G":(sim.getNetworkType()==SimSignalUtil.IS_3G)?"3G":(sim.getNetworkType()==SimSignalUtil.IS_4G?"4G":"unknown"))\r
import okio.BufferedSink;\r
import okio.Okio;\r
import okio.Source;\r
+\r
+import com.enqualcomm.support.CoreService;\r
import com.enqualcomm.support.bean.Runtime;\r
import com.enqualcomm.support.bean.VoiceContent;\r
import com.enqualcomm.support.bean.voicePacket;\r
return 0;\r
}\r
\r
+ public static boolean LogfileExist(Runtime runtime,String logfilename){\r
+ return new File(getLogfilePath(runtime,logfilename)).exists();\r
+ }\r
\r
+ public static String getLogfilePath(Runtime runtime,String logfilename){\r
+ StringBuilder stringBuilder = new StringBuilder();\r
+ stringBuilder.append(logfilename);\r
+ stringBuilder.append(".txt");\r
+ File file = new File(runtime.getCacheDir(), stringBuilder.toString());\r
+ return file.getAbsolutePath();\r
+ }\r
+\r
+ public static String getServerLogfilePath(String serverhost,String timefolder,String logfilename) {\r
+ StringBuilder urlbuilder=new StringBuilder();\r
+ urlbuilder.append("ftp://").append(serverhost).append("/")\r
+ .append("ftp/log/")\r
+ .append(DeviceInfoUtil.getModule()).append("/")\r
+ .append(DeviceInfoUtil.getSWVersionDisplayName()).append("/")\r
+ .append(CoreService.getInstance().getRuntime().IMEI()).append("/")\r
+ .append(timefolder);\r
+\r
+ return urlbuilder.toString();\r
+ }\r
public static boolean isConnectWifi(Context paramContext) {\r
ConnectivityManager connectivityManager = (ConnectivityManager)paramContext.getSystemService(CONNECTIVITY_SERVICE);\r
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();\r
--- /dev/null
+package com.enqualcomm.support.utils;\r
+\r
+import com.sina.util.dnscache.log.FileUtil;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.net.MalformedURLException;\r
+import java.net.URL;\r
+\r
+import it.sauronsoftware.ftp4j.FTPClient;\r
+import it.sauronsoftware.ftp4j.FTPFile;\r
+\r
+//uploadFolder(new URL("ftp://localhost:21/test/"), "admin", "123", new File("d:/test"));\r
+//downloadFolder(new URL("ftp://localhost:21/test/"), "admin", "123", new File("d:/dbtest"));\r
+\r
+\r
+\r
+public class ftpUtils {\r
+\r
+ //// 2. 共用方法\r
+\r
+ // 上传下载方法需要引用的方法:\r
+\r
+ public static URL newURL(URL parentUrl, String child)throws MalformedURLException {\r
+ String path = parentUrl.getPath();\r
+ if(!path.endsWith("/")){\r
+ path += "/";\r
+ }\r
+ path += child;\r
+ return new URL(parentUrl, path);\r
+ }\r
+\r
+//3. 下载文件\r
+\r
+ public static void download(URL url, String username, String password, File file){\r
+ download(url, username, password, "UTF-8", file);\r
+ }\r
+ public static void download(URL url, String username, String password, String encoding, File file){\r
+ FTPClient client = new FTPClient();\r
+ client.setCharset(encoding);\r
+ client.setType(FTPClient.TYPE_BINARY);\r
+ //连接到指定的FTP服务器(域名或IP) 不指定端口,则使用默认端口21\r
+ try {\r
+ int port = url.getPort();\r
+ if(port < 1){\r
+ port = 21;\r
+ }\r
+ client.connect(url.getHost(), port);\r
+ //登录验证\r
+ client.login(username, password);\r
+// client.changeDirectory(url.getPath());\r
+ client.download(url.getFile(), file);\r
+ client.logout();\r
+ //安全退出\r
+ client.disconnect(true);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+//4. 下载文件夹\r
+\r
+ public static void downloadFolder(URL url, String username, String password, File folder){\r
+ downloadFolder(url, username, password, "UTF-8", folder);\r
+ }\r
+ public static void downloadFolder(URL url, String username, String password, String encoding, File folder){\r
+ FTPClient client = new FTPClient();\r
+ client.setCharset(encoding);\r
+ client.setType(FTPClient.TYPE_BINARY);\r
+ //连接到指定的FTP服务器(域名或IP) 不指定端口,则使用默认端口21\r
+ try {\r
+ int port = url.getPort();\r
+ if(port < 1){\r
+ port = 21;\r
+ }\r
+ client.connect(url.getHost(), port);\r
+ //登录验证\r
+ client.login(username, password);\r
+ downloadFolder(client, url, folder);\r
+ client.logout();\r
+ //安全退出\r
+ client.disconnect(true);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private static void downloadFolder(FTPClient client, URL url, File folder)throws Exception{\r
+ client.changeDirectory(url.getPath());\r
+ FTPFile[] ftpFiles = client.list();\r
+ if(!folder.exists()){\r
+ folder.mkdirs();\r
+ }\r
+ for(FTPFile ftpFile : ftpFiles){\r
+ String name = ftpFile.getName();\r
+ if(ftpFile.getType() == FTPFile.TYPE_FILE){\r
+ client.changeDirectory(url.getPath());\r
+ File f = new File(folder, name);\r
+ client.download(name, f);\r
+ }else if(ftpFile.getType() == FTPFile.TYPE_DIRECTORY){\r
+ downloadFolder(client, newURL(url, name), new File(folder, name));\r
+ }\r
+ }\r
+ }\r
+\r
+//5. 上传文件\r
+\r
+ public static boolean upload(URL url, String username, String password, File file){\r
+ return upload(url, username, password, "UTF-8", file);\r
+ }\r
+ public static boolean upload(URL url, String username, String password, String encoding, File file){\r
+ FTPClient client = new FTPClient();\r
+ client.setCharset(encoding);\r
+ client.setType(FTPClient.TYPE_AUTO);\r
+ client.setPassive(false);\r
+ //连接到指定的FTP服务器(域名或IP) 不指定端口,则使用默认端口21\r
+ try {\r
+ int port = url.getPort();\r
+ if(port < 1){\r
+ port = 21;\r
+ }\r
+ client.connect(url.getHost(), port);\r
+ //登录验证\r
+ client.login(username, password);\r
+\r
+ String folders[]=url.getPath().split("/");\r
+ String urlpath_tmp="";\r
+ URL urlTmp=null;\r
+ //遍历创建目录\r
+ for( String folder : folders) {\r
+ if(!folder.isEmpty()) {\r
+ urlpath_tmp += "/" + folder;\r
+ if (!existsFtpDir(client,folder)) {\r
+ client.createDirectory(folder);\r
+ }\r
+ client.changeDirectory(urlpath_tmp);\r
+\r
+ }\r
+ }\r
+ client.changeDirectory(url.getPath());\r
+ client.upload(file);\r
+\r
+\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ return false;\r
+ }\r
+\r
+ try{\r
+ client.logout();\r
+ //安全退出\r
+ client.disconnect(true);\r
+ }catch(Exception e){\r
+// e.printStackTrace();\r
+ }\r
+ return true;\r
+\r
+ }\r
+\r
+//6. 上传文件夹\r
+\r
+ public static void uploadFolder(URL url, String username, String password, File folder){\r
+ uploadFolder(url, username, password, "UTF-8", folder);\r
+ }\r
+ public static void uploadFolder(URL url, String username, String password, String encoding, File folder){\r
+ FTPClient client = new FTPClient();\r
+ client.setCharset(encoding);\r
+ client.setType(FTPClient.TYPE_BINARY);\r
+ //连接到指定的FTP服务器(域名或IP) 不指定端口,则使用默认端口21\r
+ try {\r
+ int port = url.getPort();\r
+ if(port < 1){\r
+ port = 21;\r
+ }\r
+ client.connect(url.getHost(), port);\r
+ //登录验证\r
+ client.login(username, password);\r
+ client.changeDirectory(url.getPath());\r
+ String[] files = folder.list();\r
+ for(String file : files){\r
+ File f = new File(folder, file);\r
+ if(f.isDirectory()){\r
+ uploadFolder(client, url, f);\r
+ }else{\r
+ client.changeDirectory(url.getPath());\r
+ client.upload(f);\r
+ }\r
+ }\r
+ client.logout();\r
+ //安全退出\r
+ client.disconnect(true);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private static void uploadFolder(FTPClient client, URL parentUrl, File folder)throws Exception{\r
+ client.changeDirectory(parentUrl.getPath());\r
+ if(!existsFtpDir(client, folder.getName())){\r
+ client.createDirectory(folder.getName());\r
+ }\r
+ client.changeDirectory(folder.getName());\r
+\r
+ String[] fileList = folder.list();\r
+ if(fileList == null){\r
+ return ;\r
+ }\r
+\r
+ for(String file : fileList){\r
+ File f = new File(folder, file);\r
+ if(f.isDirectory()){\r
+ uploadFolder(client, newURL(parentUrl, folder.getName()), f);\r
+ }else if(f.isFile()){\r
+ client.changeDirectory(parentUrl.getPath());\r
+ client.changeDirectory(folder.getName());\r
+ client.upload(f);\r
+ }\r
+ }\r
+ }\r
+\r
+ private static boolean existsFtpDir(FTPClient client, String dir)throws Exception{\r
+ FTPFile[] ftpFiles = client.list();\r
+ for(FTPFile ftpFile : ftpFiles){\r
+ if((ftpFile.getType() == FTPFile.TYPE_DIRECTORY) && (dir.equals(ftpFile.getName()))){\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }\r
+\r
+//7. 判断是否存在文件或文件夹\r
+\r
+ public static boolean exists(URL url, String username, String password){\r
+ return exists(url, username, password, "UTF-8");\r
+\r
+ }\r
+ public static boolean exists(URL url, String username, String password, String encoding){\r
+ FTPClient client = new FTPClient();\r
+ client.setCharset(encoding);\r
+ client.setType(FTPClient.TYPE_AUTO);\r
+ client.setPassive(false);//设置被动模式 false\r
+\r
+ try {\r
+ int port = url.getPort();\r
+ if(port < 1){\r
+ port = 21;\r
+ }\r
+ String[] welcome = client.connect(url.getHost(), port);\r
+ Logger.i("welcome = " + welcome.length);\r
+ //登录验证\r
+ client.login(username, password);\r
+ String path = url.getPath();\r
+ Logger.i("path = " + path);\r
+ if(path.indexOf(".") != -1){//文件\r
+ int index = path.lastIndexOf("/");\r
+ String p = path.substring(0, index);\r
+ String f = path.substring(index + 1);\r
+ Logger.i("p = " + p + ", f = " + f);\r
+ client.changeDirectory(p);\r
+ FTPFile[] ftpFiles = client.list();\r
+ for(FTPFile ftpFile : ftpFiles){\r
+ if((ftpFile.getType() == FTPFile.TYPE_FILE) && (ftpFile.getName().equals(f))){\r
+ return true;\r
+ }\r
+ }\r
+ return false;\r
+ }else{//文件夹\r
+ client.changeDirectory(path);\r
+ }\r
+ client.logout();\r
+ //安全退出\r
+ client.disconnect(true);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ return false;\r
+ }\r
+\r
+ return true;\r
+ }\r
+\r
+//8. FTP服务器之间复制文件夹\r
+\r
+ public static void copyFolder(URL sourceUrl, String sourceUsername, String sourcePassword, String sourceEncoding, URL destUrl, String destUsername, String destPassword, String destEncoding, String tmpDir)throws IOException {\r
+ downloadFolder(sourceUrl, sourceUsername, sourcePassword, sourceEncoding, new File(tmpDir));\r
+ uploadFolder(destUrl, destUsername, destPassword, destEncoding, new File(tmpDir));\r
+ FileUtil.deleteFolder(tmpDir); //待实现\r
+ }\r
+ public static void copyFolder(URL sourceUrl, String sourceUsername, String sourcePassword, URL destUrl, String destUsername, String destPassword, String tmpDir)throws IOException{\r
+ copyFolder(sourceUrl, sourceUsername, sourcePassword, "UTF-8", destUrl, destUsername, destPassword, "UTF-8", tmpDir);\r
+ }\r
+\r
+//9.删除文件\r
+\r
+ public static void delete(URL url, String username, String password){\r
+ delete(url, username, password, "UTF-8");\r
+ }\r
+ public static void delete(URL url, String username, String password, String encoding){\r
+ FTPClient client = new FTPClient();\r
+ client.setCharset(encoding);\r
+ client.setType(FTPClient.TYPE_BINARY);\r
+ //连接到指定的FTP服务器(域名或IP) 不指定端口,则使用默认端口21\r
+ try {\r
+ int port = url.getPort();\r
+ if(port < 1){\r
+ port = 21;\r
+ }\r
+ client.connect(url.getHost(), port);\r
+ //登录验证\r
+ client.login(username, password);\r
+ client.deleteFile(url.getPath());\r
+ client.logout();\r
+ //安全退出\r
+ client.disconnect(true);\r
+ } catch (Exception e) {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+}\r
}
}
}
+
+ public static void deleteFolder(String tmpDir) {
+
+
+ }
}