Android 服务器之SFTP服务器上传下载功能
来源:互联网 发布:淘宝登录页面网页制作 编辑:程序博客网 时间:2024/05/20 23:04
本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之前所做项目的整理。
主要的代码块如下所示,对代码中相应地方稍作调整,复制粘贴到项目即可以使用,代码中会提供相应注释。
1.MainActivity
public class MainActivity extends Activity implements OnClickListener{private final String TAG="MainActivity";private Button buttonUpLoad = null; private Button buttonDownLoad = null; private SFTPUtils sftp; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sftpmain); init(); } public void init(){ //获取控件对象 buttonUpLoad = (Button) findViewById(R.id.button_upload); buttonDownLoad = (Button) findViewById(R.id.button_download); //设置控件对应相应函数 buttonUpLoad.setOnClickListener(this); buttonDownLoad.setOnClickListener(this); sftp = new SFTPUtils("SFTP服务器IP", "用户名","密码"); } public void onClick(final View v) { // TODO Auto-generated method stub new Thread() { @Override public void run() { //这里写入子线程需要做的工作 switch (v.getId()) { case R.id.button_upload: { //上传文件 Log.d(TAG,"上传文件"); String localPath = "sdcard/xml/"; String remotePath = "test"; sftp.connect(); Log.d(TAG,"连接成功"); sftp.uploadFile(remotePath,"APPInfo.xml", localPath, "APPInfo.xml"); Log.d(TAG,"上传成功"); sftp.disconnect(); Log.d(TAG,"断开连接"); } break; case R.id.button_download: { //下载文件 Log.d(TAG,"下载文件"); String localPath = "sdcard/download/"; String remotePath = "test"; sftp.connect(); Log.d(TAG,"连接成功"); sftp.downloadFile(remotePath, "APPInfo.xml", localPath, "APPInfo.xml"); Log.d(TAG,"下载成功"); sftp.disconnect(); Log.d(TAG,"断开连接"); } break; default: break; } } }.start(); };}
2.SFTPUtils
public class SFTPUtils {private String TAG="SFTPUtils";private String host;private String username;private String password;private int port = 22;private ChannelSftp sftp = null;private Session sshSession = null;public SFTPUtils (String host, String username, String password) {this.host = host;this.username = username;this.password = password;}/** * connect server via sftp */public ChannelSftp connect() { JSch jsch = new JSch(); try { sshSession = jsch.getSession(username, host, port); sshSession.setPassword(password); Properties sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); sshSession.setConfig(sshConfig); sshSession.connect(); Channel channel = sshSession.openChannel("sftp"); if (channel != null) { channel.connect(); } else { Log.e(TAG, "channel connecting failed."); } sftp = (ChannelSftp) channel; } catch (JSchException e) { e.printStackTrace(); } return sftp; }/** * 断开服务器 */public void disconnect() {if (this.sftp != null) {if (this.sftp.isConnected()) {this.sftp.disconnect();Log.d(TAG,"sftp is closed already");}}if (this.sshSession != null) {if (this.sshSession.isConnected()) {this.sshSession.disconnect();Log.d(TAG,"sshSession is closed already");}}}/** * 单个文件上传 * @param remotePath * @param remoteFileName * @param localPath * @param localFileName * @return */public boolean uploadFile(String remotePath, String remoteFileName,String localPath, String localFileName) {FileInputStream in = null;try {createDir(remotePath);System.out.println(remotePath);File file = new File(localPath + localFileName);in = new FileInputStream(file);System.out.println(in);sftp.put(in, remoteFileName);System.out.println(sftp);return true;} catch (FileNotFoundException e) {e.printStackTrace();} catch (SftpException e) {e.printStackTrace();} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}return false;}/** * 批量上传 * @param remotePath * @param localPath * @param del * @return */public boolean bacthUploadFile(String remotePath, String localPath,boolean del) {try {File file = new File(localPath);File[] files = file.listFiles();for (int i = 0; i < files.length; i++) {if (files[i].isFile()&& files[i].getName().indexOf("bak") == -1) {synchronized(remotePath){if (this.uploadFile(remotePath, files[i].getName(),localPath, files[i].getName())&& del) {deleteFile(localPath + files[i].getName());}}}}return true;} catch (Exception e) {e.printStackTrace();} finally {this.disconnect();}return false;}/** * 批量下载文件 * * @param remotPath * 远程下载目录(以路径符号结束) * @param localPath * 本地保存目录(以路径符号结束) * @param fileFormat * 下载文件格式(以特定字符开头,为空不做检验) * @param del * 下载后是否删除sftp文件 * @return */@SuppressWarnings("rawtypes")public boolean batchDownLoadFile(String remotPath, String localPath,String fileFormat, boolean del) {try {connect();Vector v = listFiles(remotPath);if (v.size() > 0) {Iterator it = v.iterator();while (it.hasNext()) {LsEntry entry = (LsEntry) it.next();String filename = entry.getFilename();SftpATTRS attrs = entry.getAttrs();if (!attrs.isDir()) {if (fileFormat != null && !"".equals(fileFormat.trim())) {if (filename.startsWith(fileFormat)) {if (this.downloadFile(remotPath, filename,localPath, filename)&& del) {deleteSFTP(remotPath, filename);}}} else {if (this.downloadFile(remotPath, filename,localPath, filename)&& del) {deleteSFTP(remotPath, filename);}}}}}} catch (SftpException e) {e.printStackTrace();} finally {this.disconnect();}return false;}/** * 单个文件下载 * @param remotePath * @param remoteFileName * @param localPath * @param localFileName * @return */public boolean downloadFile(String remotePath, String remoteFileName,String localPath, String localFileName) {try {sftp.cd(remotePath);File file = new File(localPath + localFileName);mkdirs(localPath + localFileName);sftp.get(remoteFileName, new FileOutputStream(file));return true;} catch (FileNotFoundException e) {e.printStackTrace();} catch (SftpException e) {e.printStackTrace();}return false;}/** * 删除文件 * @param filePath * @return */public boolean deleteFile(String filePath) {File file = new File(filePath);if (!file.exists()) {return false;}if (!file.isFile()) {return false;}return file.delete();}public boolean createDir(String createpath) {try {if (isDirExist(createpath)) {this.sftp.cd(createpath);Log.d(TAG,createpath);return true;}String pathArry[] = createpath.split("/");StringBuffer filePath = new StringBuffer("/");for (String path : pathArry) {if (path.equals("")) {continue;}filePath.append(path + "/");if (isDirExist(createpath)) {sftp.cd(createpath);} else {sftp.mkdir(createpath);sftp.cd(createpath);}}this.sftp.cd(createpath); return true;} catch (SftpException e) {e.printStackTrace();}return false;}/** * 判断目录是否存在 * @param directory * @return */@SuppressLint("DefaultLocale") public boolean isDirExist(String directory) {boolean isDirExistFlag = false;try {SftpATTRS sftpATTRS = sftp.lstat(directory);isDirExistFlag = true;return sftpATTRS.isDir();} catch (Exception e) {if (e.getMessage().toLowerCase().equals("no such file")) {isDirExistFlag = false;}}return isDirExistFlag;}public void deleteSFTP(String directory, String deleteFile) {try {sftp.cd(directory);sftp.rm(deleteFile);} catch (Exception e) {e.printStackTrace();}}/** * 创建目录 * @param path */public void mkdirs(String path) {File f = new File(path);String fs = f.getParent();f = new File(fs);if (!f.exists()) {f.mkdirs();}}/** * 列出目录文件 * @param directory * @return * @throws SftpException */@SuppressWarnings("rawtypes")public Vector listFiles(String directory) throws SftpException {return sftp.ls(directory);}}
4.布局文件:activity_sftpmain.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:textSize="24dip" android:layout_gravity="center" android:text="SFTP上传下载测试 "/> <Buttonandroid:id="@+id/button_upload"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="上传"/> <Buttonandroid:id="@+id/button_download"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="下载"/></LinearLayout>
5.Manifest文件配置
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
0 0
- Android 服务器之SFTP服务器上传下载功能
- Android 服务器之FTP服务器上传下载功能的实现
- 关于sftp,服务器架设,上传下载
- java 通过sftp服务器上传下载删除文件
- jsch实现sftp服务器的文件时上传下载
- .net 实现sftp 上传下载功能
- 配置FTP服务器提供上传下载功能
- SFTP之上传下载<单个>文件
- PHP之FTP、SFTP上传下载
- PHP之FTP、SFTP上传下载
- paramiko的两种简单用法,sftp上传下载,执行服务器cmd
- linux配置sftp服务器
- 配置服务器SFTP账号
- SFTP 服务器配置
- sftp 图形界面访问服务器
- sftp服务器配置-vsftpd
- Sftp服务器搭建手册
- linux搭建sftp服务器
- mysql之replication配置
- 实习工作面试常问问题
- 利用淘宝云盘作为图床
- maven 发布 web 项目(分别使用 Jetty 和 Tomcat 作为容器)
- 数组中某两元素的地址的差
- Android 服务器之SFTP服务器上传下载功能
- 完美网络
- Android实现List<String>存储到SharedPreferences工具类
- Vector、ArrayList和Hashtable、HashMap数据结构(转)
- Xcode环境开发leveldb
- Android自定义控件View的探讨
- keil 配置超声波模块注意事项
- php 简单方式截取中文字符串
- Linux设备驱动中的中断处理