Java实现对ftp的读写文件

java

这里仅仅是对ftp工具类的简单使用,很多东西还不是很了解。当然学以致用,先用到这里吧。

[java] view plain copy

 

 print?

  1. public class FtpTest {  
  2.     /** 

  3.      * 向ftp写文件(数据) 
  4.      */  
  5.     @Test  

  6.     public void uploadFile() {  

  7.    
  8.         // 要写入的文件内容  

  9.         String fileContent = "hello world,你好世界";  

  10.         // ftp登录用户名  

  11.         String userName = "admin";  

  12.         // ftp登录密码  

  13.         String userPassword = "xxxx";  

  14.         // ftp地址  

  15.         String server = "127.0.0.1";//直接ip地址  

  16.         // 创建的文件  

  17.         String fileName = "ftp.txt";  

  18.         // 指定写入的目录  

  19.         String path = "wd";  

  20.    
  21.         FTPClient ftpClient = new FTPClient();  

  22.         try {  

  23.             InputStream is = null;  

  24.             // 1.输入流  

  25.             is = new ByteArrayInputStream(fileContent.getBytes());  

  26.             // 2.连接服务器  

  27.             ftpClient.connect(server);  
  28.             // 3.登录ftp  

  29.             ftpClient.login(userName, userPassword);  
  30.             // 4.指定写入的目录  

  31.             ftpClient.changeWorkingDirectory(path);  
  32.             // 5.写操作  

  33.             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
  34.             ftpClient.storeFile(new String(fileName.getBytes("utf-8"),  

  35.                     "iso-8859-1"), is);  

  36.             is.close();  
  37.         } catch (Exception e) {  

  38.             e.printStackTrace();  
  39.         } finally {  

  40.             if (ftpClient.isConnected()) {  

  41.                 try {  

  42.                     ftpClient.disconnect();  
  43.                 } catch (Exception e) {  

  44.                     e.printStackTrace();  
  45.                 }  
  46.             }  
  47.         }  
  48.     }  
  49.       
  50.     /** 

  51.      * ftp下载数据 
  52.      */  
  53.     @Test  

  54.     public void downFile() {  

  55.         // ftp登录用户名  

  56.         String userName = "admin";  

  57.         // ftp登录密码  

  58.         String userPassword = "xxxx";  

  59.         // ftp地址:直接IP地址  

  60.         String server = "xxxx";  

  61.         // 创建的文件  

  62.         String fileName = "ftp.txt";  

  63.         // 指定写入的目录  

  64.         String path = "wd";  

  65.         // 指定本地写入文件  

  66.         String localPath="D:\\";  

  67.           
  68.         FTPClient ftp = new FTPClient();  

  69.         try {  

  70.             int reply;  

  71.             //1.连接服务器  

  72.             ftp.connect(server);  
  73.             //2.登录服务器 如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  

  74.             ftp.login(userName, userPassword);  
  75.             //3.判断登陆是否成功  

  76.             reply = ftp.getReplyCode();  
  77.             if (!FTPReply.isPositiveCompletion(reply)) {  

  78.                 ftp.disconnect();  
  79.             }  
  80.             //4.指定要下载的目录  

  81.             ftp.changeWorkingDirectory(path);// 转移到FTP服务器目录  

  82.             //5.遍历下载的目录  

  83.             FTPFile[] fs = ftp.listFiles();  
  84.             for (FTPFile ff : fs) {  

  85.                 //解决中文乱码问题,两次解码  

  86.                 byte[] bytes=ff.getName().getBytes("iso-8859-1");  

  87.                 String fn=new String(bytes,"utf8");  

  88.                 if (fn.equals(fileName)) {  

  89.                     //6.写操作,将其写入到本地文件中  

  90.                     File localFile = new File(localPath + ff.getName());  

  91.                     OutputStream is = new FileOutputStream(localFile);  

  92.                     ftp.retrieveFile(ff.getName(), is);  
  93.                     is.close();  
  94.                 }  
  95.             }  
  96.             ftp.logout();  
  97.         } catch (IOException e) {  

  98.             e.printStackTrace();  
  99.         } finally {  

  100.             if (ftp.isConnected()) {  

  101.                 try {  

  102.                     ftp.disconnect();  
  103.                 } catch (IOException ioe) {  

  104.                 }  
  105.             }  
  106.         }  
  107.     }  
  108.  }  
  109.    

 

很多知识点是相互联系的,希望以后的例子中能够结合更多的知识点进行实例编写,这样也有助于知识的巩固。

下面是我自己项目中用到的代码

 /**

* 下载pdf文件

*/

public String downLoadPdf(String url,String contNo,String localPdfName){

String newUrl="";

String pathUrl="172.18.100.165"; //FTP服务器hostname

int port=21;//FTP服务器端口

String username="shwasextt20\\ftp"; //FTP登录账号

String password="qwerty1!"; //FTP登录密码

String remotePath="/Imagedownload";//FTP服务器上的相对路径

String fileName;//要下载的文件名

// String localPath="I:\\2015\\workspace\\workspace_newng\\wj\\WebContent\\wwwroot\\ng\\downLoad";//下载后保存到本地的路径

String localPath="C:\\project\\b2c\\cms.ear\\cms.war\\wwwroot\\ng\\downLoad";//下载后保存到本地的路径

// String localPath="C:\\B2C\\cms.ear\\cms.war\\wwwroot\\ng\\downLoad";//下载后保存到本地的路径

String localName = "";

Date date = new Date();

SimpleDateFormat dr = new SimpleDateFormat("yyyyMMddHHmmss");

//重命名(保单号+时间)

localName = localPdfName;

if(!"".equals(url) && url !=null){

// String backUrl = "ftp://172.18.100.165/Imagedownload/0180050037-个险合同-电子合同-201537071208(66e735db-8ddf-4e0e-b70c-339544ff630b).PDF";

fileName = url.split("/")[4];

pathUrl = url.split("/")[2];

//生产环境ftp判断

if("172.16.252.100".equals(pathUrl)){

username = "shwasextp20\\ftp";

}else if("172.16.252.110".equals(pathUrl)){

username = "shwasextp21\\ftp";

}else{

username = "shwasextt20\\ftp";

}

FTPClient ftp = new FTPClient();

try {

ftp.connect(pathUrl,port);

ftp.login(username,password);

System.out.println(ftp.isConnected());

ftp.enterLocalPassiveMode();

ftp.setControlEncoding("GBK");

ftp.setFileType(ftp.BINARY_FILE_TYPE);

ftp.changeWorkingDirectory(remotePath);

OutputStream outputStream = null;

FTPFile[] fs = ftp.listFiles();

for (int i = 0; i < fs.length; i++) {

FTPFile ff = fs[i];

if (ff.getName().equals(fileName)) {

InputStream in = ftp.retrieveFileStream(new String(ff.getName().getBytes("GBK"), "ISO-8859-1"));

int len = 0;

long size = 0;

byte[] bt = new byte[1024];

outputStream=new BufferedOutputStream(new FileOutputStream(localPath+"\\"+localName+".pdf"));

while ((len = in.read(bt)) > 0) {

outputStream.write(bt, 0, len); // outputStream.flush();

size = size + len;

// System.out.println(fileName + "已xiazai :" + size);

}

newUrl = "cms/wwwroot/ng/downLoad/"+localName+".pdf";

outputStream.flush();

}

}

outputStream.close();

ftp.logout();

} catch (SocketException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return newUrl;

}

以上是 Java实现对ftp的读写文件 的全部内容, 来源链接: utcz.com/z/389854.html

回到顶部