最近项目经常使用到文件传输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传输
待整理….
相关推荐
本篇文章将深入探讨一个基于C++编写的文件传输软件,尽管提供的源码中缺失了TcpServer.cpp和TcpClient.cpp两个关键组件,但仍然可以从剩余的代码中学习到关于文件传输和C++编程的一些基础知识。 首先,文件传输涉及...
下面是关于文件传输C语言实现的知识点: 1. 套接字编程:在文件传输中,套接字编程是实现文件传输的基础。套接字是一种endpoint,用于在网络上通信。在C语言中,使用套接字编程可以实现文件传输。 在给定的代码中...
在这个"QT学习之文件传输和断点续传"的主题中,我们将深入探讨如何在QT环境中实现基于TCP的文件传输功能,并且特别关注断点续传技术。 首先,让我们了解TCP(Transmission Control Protocol)协议。TCP是一种面向...
标题中的“src_文件传输_源码”表明这是一个关于文件传输的源代码项目,可能包含实现文件在不同用户之间传输的编程代码。描述提到“多台用户共同连接服务端,可以在上传或者下载文件,通过socket相连”,这进一步...
文件传输是TCP/IP协议应用的一个重要方面,尤其在处理大文件和断点续传功能时,其优势更为显著。本文将深入探讨TCP/IP协议在文件传输中的工作原理,以及如何实现断点续传和处理大文件。 首先,TCP(Transmission ...
采用Visual C++ 6.0开发的一个TCP文件传输系统,采用多线程的传输方式,支持断点续传,利用配置文件设置基本的初始化信息。 文件包括源代码和安装包,源代码里包括自定义的文件传输通信协议。 程序采用分层的设计...
在C#编程语言中,利用Socket API进行TCP通信可以构建高效、稳定的文件传输系统,特别是在处理大文件时,断点续传功能则显得尤为必要。下面,我们将深入探讨如何使用C#的Socket实现TCP大文件传输并支持断点续传。 ...
在这个特定的压缩包中,我们拥有的是易语言编写的文件传输客户端和服务器的源码,这对于学习易语言以及网络文件传输技术是非常宝贵的资源。 首先,我们要理解“文件传输”在计算机科学中的基本概念。文件传输是网络...
飞鸽传书是一款在局域网环境中广泛应用的文件传输工具,尤其适合于那些不希望或者无法连接互联网的用户。这款软件以其高效、便捷和安全的特点,赢得了广大用户的喜爱。下面我们将详细探讨飞鸽传书的功能、工作原理...
在IT行业中,大文件和多文件传输是一项常见的需求,特别是在网络应用、云存储以及文件共享等领域。本主题将深入探讨如何使用C#语言实现这样的功能,同时关注在传输过程中实现进度条显示、记录上传时间和大小等重要...
断点续传功能则是在文件传输过程中,如果因为网络中断或其他原因导致传输中断,系统能够记录当前的传输进度,下次启动传输时可以从上次中断的地方继续,而不是从头开始。这对于大文件来说尤其重要,因为它节省了大量...
4. **断点续传协议**:客户端和服务器之间需要一种协议来交换关于文件传输状态的信息。例如,客户端可能需要发送一个包含当前传输位置的消息给服务器,然后服务器从该位置开始发送剩余的数据。 5. **错误处理和重试...
在IT领域,文件传输是一项基本的操作,特别是在网络编程中。本教程将深入探讨如何使用C语言来实现文件传输。C语言是一种底层、高效且灵活的编程语言,非常适合处理这种任务。 首先,我们要理解文件传输的基本原理。...
"VC文件传输-文件传输"这个主题涉及到的是使用Visual C++(简称VC)编程语言来设计和实现一个高效、多用户并发的文件传输系统。下面我们将深入探讨这一话题,主要关注服务端和客户端的设计、多线程处理、网络协议...
标题"“MFC socket 文件传输”"指出,这个项目或教程主要关注如何使用MFC库来构建一个文件传输应用,该应用利用Socket技术进行文件的发送和接收。这通常涉及以下知识点: 1. **MFC基础**:理解MFC框架的基本结构,...
4. **断点续传**:如果文件传输过程中网络中断,断点续传功能允许从上次中断的位置继续传输,而不是重新开始。 5. **校验和/哈希值**:为了确保数据的完整性和准确性,会在传输前后计算文件的校验和或哈希值(如MD5...
在IT领域,尤其是在进行开发、测试或系统管理时,本地计算机和虚拟机之间的文件传输是一项常见任务。"本地与虚拟机文件互传工具"是指能够帮助用户方便地在物理主机(本地计算机)与虚拟机之间交换文件的应用程序。...
《IPMSG飞鸽传书:突破5G大文件传输的利器》 在信息化时代,文件传输成为了日常工作和生活中的重要环节。尤其是对于大型企业和团队,高效、安全地传递大量数据至关重要。今天我们要介绍的是一款名为“IPMSG飞鸽传书...
- **异步处理**:Netty 的非阻塞 I/O 允许在等待文件传输的同时处理其他任务,提高了系统资源利用率。 5. **实例代码** - 服务器端创建 ServerBootstrap,配置 ChannelInitializer 来添加 ChannelHandler,启动...
在本文中,我们将深入探讨如何使用C# Winform来实现基于局域网的文件传输功能。这个Demo项目主要依赖于TCP(Transmission Control Protocol)协议,它是一种面向连接、可靠的网络通信协议,常用于数据的可靠传输。让...