最近项目经常使用到文件传输ftp、url访问等方式,查阅了些资料做了些整理和添加并不完善,希望能对大家有所帮助。
1.ftp文件传输源码:
1.1采用Runtime.getRuntime().exec()执行操作系统的ftp命令
1.1.1 ftp上传脚本
Windows脚本:
open 目标IP
用户名
密码(没有密码则不用写)
cd 目标路径
asc
prompt
put 本地文件(完整路径)
bye
Unix脚本:
ftp -n -i 目标IP <<!EOF
user 用户名 密码
cd 目标路径
lcd 本地文件路径
asc
prompt
put 本地文件
bye
!EOF
这里传送的是文本文件,所以采用asc模式传输。然后Java Runtime执行命令 [Runtime.getRuntime().exec(cmd)] 如下:
1.1.2cmd指令
Windows命令:
ftp -s:脚本文件(完整路径)
Unix命令:
sh 脚本文件(完整路径)
1.1.3代码示例:(注意命令不要有空格)
a.脚本示例:C:/Users/gkq/Desktop/ftp.txt
open 127.0.0.1
gkq
cd gkq
asc
prompt
put C:/Users/gkq/Desktop/test1.txt
bye
b.代码:
public class RuntimeTest { public static void main(String[] args) throws IOException{ @SuppressWarnings("unused") java.lang.Process process = java.lang.Runtime.getRuntime().exec("ftp -s:C:/Users/gkq/Desktop/ftp.txt "); } }
注:貌似采用这种方式中文路径问题是无法上传的
1.2实现本地文件传输到ftp服务器指定目录(中文路径支持),需要使用apache common.net jar包
代码示例:
public class FtpClient{ private String userName; private String pwd; private String url; private int port; private FTPClient ftpClient; public FtpClient(String url, int port, String username, String password) throws Exception { this.url = new String(url); this.port = port; this.userName = new String(username); this.pwd = new String(password); ftpClient=new FTPClient(); } private void connect() throws SocketException, IOException{ ftpClient.connect(url, port);//连接FTP服务器 FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX); config.setServerLanguageCode("zh"); config.setServerTimeZoneId("XXXX"); ftpClient.configure(config); //设置默认超时 ftpClient.setDefaultTimeout(30000); //设置数据超时 ftpClient.setDataTimeout(30000); //socket超时 ftpClient.setSoTimeout(30000); ftpClient.setBufferSize(524288); //传输模式和类型 ftpClient.setFileTransferMode(FTP.BINARY_FILE_TYPE); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); ftpClient.setControlEncoding("GBK"); } private void disconnect() throws IOException{ if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ioe) { System.out.println("断开连接出错"); ioe.printStackTrace(); throw ioe; } } } private void login() throws Exception{ int reply; try{ if(!ftpClient.login(userName, pwd)){ System.out.println("登入失败,用户名密码不匹配"); throw new Exception("登入失败,用户名密码不匹配"); }else{ //服务器是否响应 reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); throw new Exception("服务器无响应,登入失败"); } } }catch(Exception e){ e.printStackTrace(); throw e; } } private void logout() throws Exception{ try{ if(!ftpClient.logout()){ System.out.println("退出失败"); throw new Exception("退出失败"); } }catch(Exception e){ e.printStackTrace(); throw e; } } public boolean uploadFile(String pathInPlatform, String filenameInPlatform, String fileInLocal) throws Exception{ try{ //连接ftp this.connect(); //登入 this.login(); //转到指定目录,中文路径的处理 if(!ftpClient.changeWorkingDirectory(new String(pathInPlatform.getBytes("GBK"), "iso-8859-1"))){ System.out.println("访问目录不存在"); throw new Exception("访问目录不存在"); }else{ //上传文件 FileInputStream input=new FileInputStream(new File(fileInLocal)); ftpClient.storeFile(new String(filenameInPlatform.getBytes("GBK"), "iso-8859-1"),input); input.close(); } this.logout(); this.disconnect(); return true; }catch(Exception e){ e.printStackTrace(); this.disconnect(); throw e; } } }
2..web文件传输
通过url下载文件转为2进制流
public static synchronized byte[] getDataFromPlatform(URL url) throws Exception{ InputStream is=null; HttpURLConnection httpConn; int responseCode; try{ httpConn=(HttpURLConnection) url.openConnection(); responseCode=httpConn.getResponseCode(); if(responseCode==HttpURLConnection.HTTP_OK){ is=httpConn.getInputStream(); if (is != null) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buf = new byte[1024]; int ch = -1; int count = 0; while ((ch = is.read(buf)) != -1) {//读取1024字节数据,存储到buf中 ,是否读完 baos.write(buf, 0, ch);//从0开始ch长度的byte写入outstream count += ch;//总数 } is.close(); baos.close(); return baos.toByteArray();//--->存到数据库中 } else{ throw new Exception("Error,input Stream is null"); } }else{ throw new Exception("Connect error,can not get any data"); } }catch(Exception e){ e.printStackTrace(); throw e; }finally{ httpConn.disconnect(); } }
3.Socket传输
待整理….
相关推荐
采用Visual C++ 6.0开发的一个TCP文件传输系统,采用多线程的传输方式,支持断点续传,利用配置文件设置基本的初始化信息。 文件包括源代码和安装包,源代码里包括自定义的文件传输通信协议。 程序采用分层的设计...
在QT上开发的文件传输工具,利用TCP实现文件传输,支持断点续传操作。
用于文件传输非常方便用于文件传输非常方便用于文件传输非常方便用于文件传输非常方便
TCP/IP协议下的文件传输(包括超过4G的文件) 支持断点续传
C# socket TCP 大文件传输同时实现断点续传
采用Visual C++ 6.0开发的一个TCP文件传输系统,采用多线程的传输方式,支持断点续传,利用配置文件设置基本的初始化信息。 文件包括源代码和安装包,源代码里包括自定义的文件传输通信协议。 程序采用分层的设计...
如何利用 Java 实现 QQ 文件传输功能 现在, 通过网络传输文件已经非常普遍, 各种传输工 具也很多, 最具有代表性的就是 QQ 提供的文件传输功能了, 它能让好友之间方便的把自己的文件传给对方。 仔细查看 QQ 的...
文件传输源码 文件传输源码 文件传输源码 文件传输源码
实现大文件多文件传输,带进度条,上传时间 大小的记录
文件传输文件传输文件传输文件传输文件传输文件传输文件传输文件传输文件传输文件传输文件传输文件传输
vb 文件传输,用于局域网传文件。有源文件。 基本原理是把一个文件分成很多二进制数组,然后发送。在接受方还原。
UDP文件传输.rar UDP文件传输.rar UDP文件传输.rar UDP文件传输.rar UDP文件传输.rar UDP文件传输.rar
c++编写的 MFC socket 文件传输 编译通过 可直接运行
Socket进行文件传输的例子 服务器先向客户端传文件 客户端也可向服务器端传文件
1服务端接收文件,客户端发送文件。 2 每个Socket连接同时只能够传输一个文件。 3 可同时发送网络消息 网络消息的消息格式为: @+nnnnn+消息内容,其中@为消息头,nnnnn为消息...-24 -24 接收方出错,文件传输被取消
基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于openssl的ftp文件传输系统源码基于...
很好用的局域网传输文件工具,不联网也可以使用
关于文件传输c++的实现源码,如有错误请指正!
多线程网络传输大都没有实现大于2G文件,在前人基础上改写的真正的多线程网络传输,不受文件大小的限制!先上传大文件上传的完整代码,有需要大文件超过2G的下载,请留言!