FTP读取远程文件&解决使用FTPClient类时线程挂起的问题
来源:互联网 发布:百度地图js 编辑:程序博客网 时间:2024/06/03 12:29
1.什么是FTP
FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。说白了,就是文件传输的规则,方法。与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。
2.FTP适合哪种操作系统
常见的操作系统均可以,而且可以说实现在不同操作系统间进行文件的传输
3.一个简单的FTP使用(局域网使用)
①安装FTP服务器
参照:http://blog.csdn.net/exlsunshine/article/details/29181465
SSL那个可以选无SSL证书
②通过客户端访问
前提:两个主机在同一局域网,服务器电脑关闭了防火墙设置
方法:ftp://要访问的IP
二、使用java代码访问远程服务器并读取文件
1.代码如下
使用的是FTPClient类,用到的jar包有commons-net-3.3.jar、jakarta-oro-2.0.8.jar、javacsv.jar、jdk为1.8
资源下载
http://download.csdn.net/detail/kunfd/9926398
import java.io.*;import java.net.SocketException;import java.text.ParseException;import java.util.ArrayList;import java.util.List;import org.apache.commons.net.ftp.FTPClient;import org.apache.commons.net.ftp.FTPFile;public class FTP {// 设置服务主机的地址,密码等基本信息private String ip = "远程主机ip";private String userName = "远程主机用户名";private String userPwd = "远程主机用户密码";private int port = 21;private FTPClient ftpClient = new FTPClient();public FTP(){try {connectionServer(ftpClient,ip,port,userName,userPwd);} catch (IOException e) {e.printStackTrace();}}
//连接远程服务器public void connectionServer(FTPClient ftpClient,String ip,int port,String userName,String userPwd) throws IOException {ftpClient.connect(ip,port);//连接主机,方法继承于SocketClientftpClient.login(userName,userPwd);//登录,成功的话返回tureftpClient.enterLocalPassiveMode();//设置为主动动模式}//文件上传功能public boolean uploadFile(InputStream iStream, String newName) throws IOException {boolean flag = false;try {ftpClient.setDataTimeout(30000);//设置超时ftpClient.setSoTimeout(30000);ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);//设置传输模式flag = ftpClient.storeFile(newName, iStream);//根据输入流传输文件} catch (Exception e) {flag = false;return flag;} finally {if (iStream != null) {iStream.close();}}return flag;}//读取服务器上指定文件并输出到控制台public void readFile(String remote,String pathname) throws IOException {ftpClient.setDataTimeout(30000);ftpClient.setSoTimeout(30000);ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);ftpClient.changeWorkingDirectory(pathname);//跳转到指定位置InputStream in = ftpClient.retrieveFileStream(remote);//打开指定位置的文件,返回一个输入流,给外界读取BufferedReader reader = new BufferedReader(new InputStreamReader(in,"UTF-8"));String line;while ((line = reader.readLine()) != null) {System.out.println(line);}}//删除指定文件public void deleteFile(String fileName) {try {ftpClient.deleteFile(fileName);} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) throws Exception {FTP ftp = new FTP();//boolean b= ftp.uploadFile(new BufferedInputStream(new FileInputStream("G:\\test.txt")),"test.txt");ftp.readFile("test.txt","test");//ftp.deleteFile("test.txt");}}
5.FTP的使用注意事项
①防火墙注意事项
②当使用FTPClient中的方法比如上传setFileType,读取retrieveFileStream的时候,注意要将FTP设置为被动模式
enterLocalPassiveMode(要不然会导致线程挂起)
6.参考内容
http://blog.csdn.net/huanggang028/article/details/41446707
- FTP读取远程文件&解决使用FTPClient类时线程挂起的问题
- 解决FTPClient linux 下载文件小于实际文件,线程挂起等问题
- ftpclient读取远程文件
- FTP文件上传------FTPClient的使用
- php使用ftp远程上传文件类(解决主从文件同步问题的简单方法)
- 使用FtpClient类实现FTP文件上传下载
- 使用FTPClient构造自己的FTP类
- Apache FTPClient上传文件时的问题及解决
- 使用FTPClient文件上传下载遇到的问题
- FTPClient调用retrieveFileStream导致线程挂起(防火墙问题)
- 使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决
- 使用sun.net.ftp.FtpClient进行上传功能开发,在jdk1.7上不适用问题的解决
- java的ftp上传文件程序(FtpClient类)
- ftp ftpclient异常解决、远程命令已经错误代码
- ftp ftpclient异常解决、远程命令已经错误代码
- apache-net ftpclient ftp死锁的问题
- 使用Sun的FtpClient做FTP上传下载
- DELPHI线程类挂起的问题
- C语言生成指定长度随机字符串
- C# 多线程
- 有关memset()函数
- 使用java8记录
- 使用QPainter 画饼图
- FTP读取远程文件&解决使用FTPClient类时线程挂起的问题
- 2017/8/3 第十一天
- C++ GUI Programming with Qt4 学习指导
- LiME与Volatility的编译和使用 (MD)
- 深度神经网络入门学习
- Android studio finished with non-zero exit value 1
- 初学BOOST库,基于Tcp/Ip简易的问题回答
- new一个对象的时候JVM都做了那些事情
- FH