问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

你好!我也碰到了SFTP传输,纯java可以,Android就不行,纠结好几天了,希望你能尽快帮我解答,谢谢!

发布网友 发布时间:2022-05-15 20:17

我来回答

1个回答

热心网友 时间:2024-02-27 15:19

我就是用sftp传输的,Android下,就是用手机录音,然后把录下来的音频文件保存到服务器里,给你源代码吧,

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import java.util.Vector;


import android.content.Context;
import android.telephony.TelephonyManager;
import android.text.format.DateFormat;
import android.text.format.Time;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;


public class Sftp_upload {

 /**
  * 连接sftp服务器
  * @param host 主机
  * @param port 端口
  * @param username 用户名
  * @param password 密码
  * @return
  */
 public ChannelSftp connect(String host, int port, String username,String password) {
 
 ChannelSftp sftp = null;
  try {
   JSch jsch = new JSch();
   jsch.getSession(username, host, port);
   Session sshSession = jsch.getSession(username, host, port);
   System.out.println("Session created.");
   sshSession.setPassword(password);
   Properties sshConfig = new Properties();
   sshConfig.put("StrictHostKeyChecking", "no");
   sshSession.setConfig(sshConfig);
   sshSession.connect();
   System.out.println("Session connected.");
   System.out.println("Opening Channel.");
   Channel channel = sshSession.openChannel("sftp");
   channel.connect();
   sftp = (ChannelSftp) channel;
   System.out.println("Connected to " + host + ".");
   //System.out.println("登录成功");
  } catch (Exception e) {

  }
  return sftp;
 }

 /**
  * 上传文件
  * @param directory 上传的目录
  * @param uploadFile 要上传的文件
  * @param sftp
  */
 public void upload(String directory, String uploadFile, ChannelSftp sftp) {
  
 try {
   sftp.cd(directory);
   File file=new File(uploadFile);
  
   String currentTime=DateFormat.format("yyyy_MM_dd_hh_mm_ss", new Date()).toString(); //获取时间
   String filename=currentTime+".wav"; //文件名为当前时间来保存
   sftp.put(new FileInputStream(file), filename);   
  


   System.out.println("上传成功!");
} catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 下载文件
  * @param directory 下载目录
  * @param downloadFile 下载的文件
  * @param saveFile 存在本地的路径
  * @param sftp
  */
 public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {

 try {
   sftp.cd(directory);
   File file=new File(saveFile);
   sftp.get(downloadFile, new FileOutputStream(file));
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 删除文件
  * @param directory 要删除文件所在目录
  * @param deleteFile 要删除的文件
  * @param sftp
  */
 public void delete(String directory, String deleteFile, ChannelSftp sftp) {

 try {
   sftp.cd(directory);
   sftp.rm(deleteFile);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 /**
  * 列出目录下的文件
  * @param directory 要列出的目录
  * @param sftp
  * @return
  * @throws SftpException
  */
 public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
  
 return sftp.ls(directory);
 
 }
 
 //上传文件
 
 
 public static void Sftp_server(String file,String imsi) {

  String Imsi = imsi; 
  Sftp_upload sf = new Sftp_upload(); 
  String host = "192.168.1.60";
  int port = 22;
  String username = "root";
  String password = "123456";
  String directory = "/data/test/wav";
  //String uploadFile = "c:\\audiocheck\\test.wav";
  String uploadFile = file;
 // String downloadFile = "/data/test/wav/lame.sh";
// String saveFile = "c:\\audiocheck\\content.txt";
 // String deleteFile = "c:\\audiocheck\\content.txt";
  ChannelSftp sftp=sf.connect(host, port, username, password);
  
  //sf.download(directory, downloadFile, saveFile, sftp);
  //sf.delete(directory, deleteFile, sftp);

  try{
   sftp.cd(directory);
   sftp.mkdir(Imsi); //创建目录
   System.out.println("finished");
  }catch(Exception e){
  e.printStackTrace();
  }
  directory = "/data/test/wav/"+imsi;
  sf.upload(directory, uploadFile, sftp);//上传文件到服务器
 
 }
 
}

这个就是源代码,

然后上传的时候用的代码

//imsi也就是 手机的型号来创建文件夹的,这些你都可以修改的。

String file = mWorkdir+"/"+"resFile.wav"; //要上传的文件
Sftp_upload.Sftp_server(file,imsi); //上传文件
System.out.println("已上传");

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
关于第一次经典语录 ...三个月后打开包装发现里面零件全部损坏,请问能去超市退换 微单相机哪个品牌好 一首歌在酷狗上查找猪猪非主流歌曲club 沙拉拉就有求歌名 一首英文DJ,歌词是"刷啦啦哩,刷啦啦啦哩"还有歌词听起来好像是:"I wa... sha la la la sha la la lei 是什么歌 男孩起名字大全免费2025年 姓李的男孩起名字大全 ...九月十二(阴历)下午16点 出生 姓李 希望大师给起个好点的名字... 电脑开机提示先激活windows电脑上出现要激活WINDOWS是什么意思_百度知 ... 中国建设银行从邮政储蓄银行提钱会产生多少费用 如何用java给sftp服务器上传文件? 关于手机X6应用程序下载 怎样区分冬虫夏草的好坏 想知道手拿小风扇为什么边充电边开只能开一档和小灯,该怎么改装呢? 充电风扇一边充电一边吹有危险吗 微信怎么隐藏不让好友看到 微信怎么隐藏不让别人看见我的? 如何对他人隐藏自己的 苹果微信怎么隐藏码呀? 怎样把自己的隐藏起来 怎么把隐藏 怎么隐藏别人看不见 如何屏蔽 如何屏蔽 vivo手机微信怎么隐藏自己的? 微信怎么隐藏不让别人看见我的? 怎样隐藏好友不让别人看到 怎么对微信好友隐藏自己的 怎么隐藏,让好友看不到自己的 华为手机怎样隐藏? Apache SSHD实现SFTP服务端,客户端访问进行远程文件上传下载 到底什么是XDATA扩展数据呢?如何设定图形参数??? 否则扩展数据将不支持再次修改什么意思 lisp 扩展数据 股票软件中扩展数据是指什么 包含什么 保存多长时间的比较好 大智慧扩展数据能否自定义计算对象? 如何获取字段拓展的数据 通达信的扩展数据如何实时刷新 哪个软件能支撑拓展数据库盘中实时行情 跪求什么情况人物数据库MIR.DB需要扩展,请使用扩展工具扩展数据 摩尔庄园之餐厅里的哪道菜得到的经验最多? 睡觉前能吃苹果吗好吗 睡觉前能吃苹果吗?请回答 做婚礼活动策划真有那么忙嘛?忙到打个电话时间都没有嘛 联通七彩冰激凌套餐卡里面的省内无限流量可以插在便携式WiFi上用吗 联通七彩冰激凌套餐卡里面的省内无限流量可以插在便携式WiFi机上用吗 晚上睡觉前能吃苹果吗 睡前吃苹果不利消化 现在做婚礼策划怎么样?有没有前途?没基础可以不以学呀? 黑夜睡觉前是不是不能吃苹果? 晚上睡觉前吃苹果好么?