📄 ftptest说明.txt
字号:
FtpTest.java测试用java语言进行ftp连接,最重要的是FtpClient类,该类的所有函数都会抛出异常,详细信息请参见JSP高级编程(电子版有)第11章ftp连接。下面是详细信息;
ftp 包简介
sun.net.ftp 包有五个类分别是FtpClient 类FtpLoginException 类FtpProtocolException
类FtpInputStream类IftpClient 类FtpClient 类代表的是FTP 服务的客户端FtpInputStream
流类继承自TelnetInputStream 类用于读取FTP 服务器的应答信息lftpClient 类用于处理
使用代理服务器访问FTP 服务器的情况FtpLoginException 类和FtpProtocolException 类用
于处理访问FTP 服务器过程中的异常和错误
下面我们简要介绍FtpClient 类的用法FtpClient 类的主要方法如下所示
public FtpClient(String p0) throws IOException; 这是FtpClient 类的构造函数利用
它可以和FTP 服务器建立有效的连接参数p0 代表服务器的IP 地址但是还需要调用login()
方法输入用户名和密码才能够登录FTP 服务器
public FtpClient() throws IOException; 这也是FtpClient 类的构造函数但是这个函
数没有和FTP 服务器建立实质上的连接需要调用openServer()方法打开客户端与FTP 服
务器的连接然后再使用login()方法登录FTP 服务器
public void closeServer() throws IOException; 这个方法关闭客户端与服务端的连接
public void openServer(String p0) throws IOException; 这个方法将建立客户端与
FTP 服务器之间的连接参数p0 是FTP 服务器的名字
public void openServer(String p0 int p1) throws IOException; 这个方法的作用和前
者一样参数p1 指定需要连接的服务器的FTP 服务的端口号FTP 服务的端口号一般是
21 但是出于某些原因可能将这个端口号改为别的数值了这时就需要使用这个方法和
服务器建立有效的连接
public void login(String p0 String p1) throws IOException; 这个方法的作用是登录
FTP 服务器参数p0 代表用户名参数p1 代表相应的密码在调用login()方法以前必
须首先调用openServer()等方法打开客户端与服务端之间的连接
public TelnetInputStream get(String p0) throws IOException 这个方法用于从FTP
服务器上下载文件参数p0 代表文件或者目录的名字这个方法的返回值是一个TelnetInputStream 对
象下面的代码段演示了如何使用这个方法从FTP 服务器上获取文件
例
InputStream tis=(InputStream)fc.get("参考文献.txt");
BufferedReader filein=new BufferedReader(new InputStreamReader(tis));
String temp;
while((temp=filein.readLine())!=null)
{
out.println(temp+"<br>");
}
在上面的代码中我们首先把get()方法的返回值强制转换为InputStream 对象然后
从这个InputStream 对象创建BufferedReader 对象filein 利用filein 来读取数据流这是因
为BufferedReader 对象有readLine()方法可以一次读入一行数据支持中文的读取而且
不会发生网络阻塞TelnetInputStream 对象就没有这样的功能
public TelnetOutputStream put(String p0) throws IOException put()方法和get()方法
相对put()方法可以往服务器中写入数据参数p0 代表服务端相应的文件名这个方法将
打开一个Telnet 输出流对象利用TelnetOutputStream 对象的方法可以把数据写入到p0
参数指定的文件中在调用这个方法的同时首先需要确定你是否有权限往FTP 服务器上
写入数据
public TelnetInputStream list() throws IOException 这个方法就相当于标准的FTP
命令LIST 它可以返回FTP 服务器上当前目录的信息例如有哪些文件夹有哪些文件
大小如何什么时间创建的等等list()方法的返回值是一个TelnetInputStream 对象下面
的代码段演示了如何使用list()方法列出FTP 服务器上的目录信息
例
InputStream tis=(InputStream)fc.list();
BufferedReader in=new BufferedReader(new InputStreamReader(tis));
String temp;
while((temp=in.readLine())!=null)
{
out.println(temp+"<br>");
}
由上面的代码可见list()方法与get()方法的使用技巧基本一样
public void cd(String p0) throws IOException cd()方法十分类似于DOS 系统的cd 命
令利用cd()方法可以改变FTP 服务器上的当前目录参数p0 表示文件夹的名字特别地
cd("..")表示进入当前目录的上一级目录利用cd()方法和list()方法相互配合我们就可以
遍历FTP 服务器上的所有目录和文件了
public void binary() throws IOException binary()方法指定客户端与服务端之间的数
据传输以二进制的形式进行
public void ascii() throws IOException ascii()方法指定客户端与服务端之间的数据传
输以ascii 吗的形式进行
在下面的小节中我们将以两个完整的例子为代表向读者介绍如何使用上面列出来
第11 章JSP 网络程序开发
的方法访问FTP 服务器
11.3.3 访问FTP 服务器
请看程序清单11.2(ftp.jsp) 这个ftp.jsp 程序演示了如何获取服务器上的目录信息
程序清单11.2
<%--
File Name ftp.jsp
Author fancy
Date 2001.4.8
Note Use ftp service to list file or directory
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@page import="sun.net.ftp.*" %>
<%@page import="java.io.*" %>
<%@page import="sun.net.*" %>
<%
FtpClient fc=new FtpClient();
fc.openServer("162.105.106.162");
out.println(fc.getResponseString()+"<br>");
fc.login("fancy" "fancy");
out.println(fc.getResponseString()+"<br>");
fc.cd("doc");
InputStream tis=(InputStream)fc.list();
out.println(fc.getResponseString()+"<br>");
BufferedReader in=new BufferedReader(new InputStreamReader(tis));
String temp;
while((temp=in.readLine())!=null)
{
out.println(temp+"<br>");
}
fc.closeServer();
out.println(fc.getResponseString()+"<br>");
%>
程序ftp.jsp 首先创建FtpClient 类的实例对象fc 然后依次调用openServer()方法和
login()方法登录服务器调用cd()方法把当前目录设为doc 然后利用list()方法获取目录信
息接下来就是如何读取输入流的信息了
程序清单11.2(ftp.jsp)的运行效果如图11.11 所示
图11.11 ftp.jsp 程序的运行效果
程序清单11.3
<%--
File Name ftp1.jsp
Author fancy
Date 2001.4.8
Note Use ftp service to get file
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@page import="sun.net.ftp.*" %>
<%@page import="java.io.*" %>
<%@page import="sun.net.*" %>
<%!
public String getStr(String str)
{
try
{
String temp_p=str;
byte[] temp_t=temp_p.getBytes("ISO8859-1");
String temp=new String(temp_t);
return temp;
}
catch(Exception e)
{
//to do nothing
}
return "null";
}
%>
<%
FtpClient fc=new FtpClient();
fc.openServer("162.105.106.162");
//out.println(fc.getResponseString()+"<br>");
fc.login("fancy" "fancy");
//out.println(fc.getResponseString()+"<br>");
fc.cd("doc");
out.println(fc.getResponseString()+"<br>");
InputStream tis=(InputStream)fc.get("参考文献.txt");
out.println(getStr(fc.getResponseString())+"<br>");
BufferedReader filein=new BufferedReader(new InputStreamReader(tis));
String temp;
while((temp=filein.readLine())!=null)
{
out.println(temp+"<br>");
}
fc.closeServer();
out.println(fc.getResponseString()+"<br>");
%>
在程序清单11.3 中(ftp1.jsp) 前半部分和ftp.jsp 程序一样后半部分演示了如何利用
get()方法获取FTP 服务器上的文件在这里我们遇到一个问题就是FTP 服务器如果往客
户端发送的应答信息中含有中文那么在JSP 程序中将不能够正确显示所以我们编写了
一个getStr()函数这个函数可以转换字符串的内码含有中文字符的字符串经过调用这个
函数就能够正确显示中文字符了
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -