java之ftp

1 ftp服务器需要先下载ftp服务器,


2 然后安装完ftp服务器后,创建域(会有设置服务器的ip等)


3 创完域后,创建用户(会有账号、密码、设置根目录、权限)


4 可以通过浏览器访问:http://服务器ip 


5 在浏览器中输入ftp路径后,出现登陆界面,输入账号和密码。点击登陆


java后台操作:




6 连接ftp服务器。先创建FTPClient对象,然后创建FTPClientConfig对象,然后连接服务器、登陆账户、设置文件类型为二进制类型。
如:ftpClient=new FTPClient();//创建FTPClient对象


FTPClientConfig ftpClientConfig=new FTPClientConfig(FTPClientConfig.SYST_UNIX);//创建FTPClientConfig,设置操作系统
ftpClientConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);//设置字符集


ftpClient.configure(ftpClientConfig);


ftpClient.connect(server,port);//连接服务器
connect_flag=ftpClient.login(username, password);//登陆
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置文件类型为二进制类型


7 断开连接ftp服务器,通过ftpClient的disconnnect()方法。
如:if(ftpClient!=null&&ftpClient.isConnected()){
ftpClient.disconnect();//断开服务器连接
connect_flag=false;
}


8 上传文件到ftp服务器。上传有三个步骤:设置目的、创建上传服务、上传
如:ftpClient.changeWorkingDirectory("/");//设置上传到的目录为根目录
ftpClient.remoteStore(ftpFileName);//创造远程传输服务器
flag=ftpClient.storeFile(ftpFileName, inputStream);//传输文件


9 从ftp服务器上下载文件,下载有1步,检索下载文件。
如:InputStream inputStream=null;
inputStream=ftpClient.retrieveFileStream(ftpFileName);//检索ftp服务器上的文件,并返回文件输入流


10 带路径的文件上传到ftp服务器上:如上传到/aa/bb/cc.txt 。aa和bb是文件夹,如果没有该文件夹需要创建,FTPClient有两个函数:changeWorkingDirectory方法和makeDirectory方法。前者是改变工作目录,后者是创建工作目录。
如:String path=ftpFileName.substring(0,ftpFileName.lastIndexOf("/"));
createAndChangeWorkingFtpDir(path); //创造文件夹路径。如果没有则创建,
String fileName=ftpFileName.substring(ftpFileName.lastIndexOf("/")+1);
ftpClient.remoteStore(fileName);//设置上传服务
ftpClient.storeFile(fileName, inputStream);//上传文件


完整的例子:
package com.util;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.SocketException;


import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;


public class FTPUtils {


private FTPClient ftpClient;
private boolean connect_flag=false;
public FTPUtils() {
super();
// TODO Auto-generated constructor stub
}

public boolean isConnect(){
return this.connect_flag;
}

/**连接FTP服务器,并登陆
* @param server
* @param port
* @param username
* @param password
*/
public void connectServer(String server,int port,String username,String password){
//设置FTPClientConfig FTP客户端的配置 :操作系统、字符集
FTPClientConfig ftpClientConfig=new FTPClientConfig(FTPClientConfig.SYST_UNIX);
ftpClientConfig.setServerLanguageCode(FTP.DEFAULT_CONTROL_ENCODING);

ftpClient=new FTPClient();
ftpClient.configure(ftpClientConfig);

try {
ftpClient.connect(server,port);//连接服务器
connect_flag=ftpClient.login(username, password);//登陆
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);//设置文件类型为二进制类型
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
connect_flag=false;
} catch(IOException e){
e.printStackTrace();
}
System.out.println("connect_flag:"+this.connect_flag);

}

/**断开FTP的登陆
* @throws IOException
*/
public void disConnect() throws IOException{
if(ftpClient!=null&&ftpClient.isConnected()){
ftpClient.disconnect();
connect_flag=false;
}
}

/**上传文件到ftp服务器汇总
* @param inputStream待上传的文件流
* @param ftpFileName准备放到ftp服务器上的文件名
* @return
*/
public boolean uploadFile(InputStream inputStream,String ftpFileName){
boolean flag=false;
try {
ftpClient.changeWorkingDirectory("/");//设置上传到的目录为根目录
ftpClient.remoteStore(ftpFileName);//创造远程传输服务器
flag=ftpClient.storeFile(ftpFileName, inputStream);//传输文件
System.out.println("upload:"+flag);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
flag=false;
}//设置上传的目的地的目录
return flag;
}

/**上传文件,可以带路径
* @param inputStream
* @param ftpFileName
* @return
* @throws IOException
*/
public boolean uploadFileForPath(InputStream inputStream,String ftpFileName) throws IOException{
String path=ftpFileName.substring(0,ftpFileName.lastIndexOf("/"));
System.out.println(path);

createAndChangeWorkingFtpDir(path);

String fileName=ftpFileName.substring(ftpFileName.lastIndexOf("/")+1);
System.out.println("file:"+fileName);
ftpClient.remoteStore(fileName);
return ftpClient.storeFile(fileName, inputStream);
//createFtpDir()
}

/**创建ftp文件夹
* @param path
* @throws IOException
*/
public void createAndChangeWorkingFtpDir(String path) throws IOException{
String root="/";
ftpClient.changeWorkingDirectory(root);
String path_array[]=path.split("/");
for(int i=1;i<path_array.length;i++){
String path_=path_array[i];
root=root+"/"+path_;
boolean flag=ftpClient.changeWorkingDirectory(root);//改变工作目录
if(!flag){
ftpClient.makeDirectory(path_);//创建目录
ftpClient.changeWorkingDirectory(root);
}
//ftpClient.m
}
}

/**从ftp服务器上下载文件
* @param ftpFileName ftp服务器上的文件名称 从根目录开始,根目录为/
* @return 输出流
*/
public InputStream downloadFile(String ftpFileName){
InputStream inputStream=null;
try {
//ftpClient.retrieveFile(ftpFileName,fileOutputStream);
inputStream=ftpClient.retrieveFileStream(ftpFileName);//检索ftp服务器上的文件,并返回文件输入流
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return inputStream;

}

public static void main(String[] args) {
FTPUtils ftpUtils=new FTPUtils();
if(!ftpUtils.isConnect()){
ftpUtils.connectServer("127.0.0.1", 21, "test", "123456");
}

/*try {
ftpUtils.uploadFile(new FileInputStream(new File("C:/aa.txt")), "ckcore_ftp111.txt");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
System.out.println("file not found");
}*/



InputStream fileInputStream=ftpUtils.downloadFile("/aa/bb.txt");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(fileInputStream));
String neirong=null;
try {
while((neirong=bufferedReader.readLine())!=null){
System.out.println(neirong);
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}/**/

/*try {
ftpUtils.uploadFileForPath(new FileInputStream(new File("C:/aa.txt")), "/bb/cc/dd/bb112.txt");
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/

//String path="/aa/bb";
//System.out.println(path.split("/"));
//System.out.println("ddd");
try {
ftpUtils.disConnect();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//if(!ftpUtils.isConnect()){
//ftpUtils.connectServer("127.0.0.1", 21, "test", "123456");
//}
}

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值