- import java.io.DataInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.FileInputStream;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.List;
- import sun.net.*;
- import sun.net.ftp.FtpClient;
- //2、我们建一个叫做FtpUtil的class
- public class FtpUtil{
- //创建ftp服务器
- FtpClient ftpClient;
- /**
- * connectServer
- * 连接ftp服务器
- * @throws java.io.IOException
- * @param path 文件夹,空代表根目录
- * @param password 密码
- * @param user 登陆用户
- * @param server 服务器地址
- */
- public void connectServer(String server, String user, String password, String path)
- throws IOException
- {
- // server:FTP服务器的IP地址;user:登录FTP服务器的用户名
- // password:登录FTP服务器的用户名的口令;path:FTP服务器上的路径
- ftpClient = new FtpClient();
- //开启服务
- ftpClient.openServer(server);
- //登录
- ftpClient.login(user, password);
- //path是ftp服务下主目录的子目录
- if (path.length() != 0) ftpClient.cd(path);
- //用2进制上传、下载
- ftpClient.binary();
- }
- /**
- * upload
- * 上传文件
- * @throws java.lang.Exception
- * @return -1 文件不存在
- * -2 文件内容为空
- * >0 成功上传,返回文件的大小
- * @param newname 上传后的新文件名
- * @param filename 上传的文件
- */
- public long upload(String filename,String newname) throws Exception
- {
- long result = 0;
- //ftp输出流
- TelnetOutputStream os = null;
- FileInputStream is = null;
- try {
- java.io.File file_in = new java.io.File(filename);
- if (!file_in.exists()) return -1;
- if (file_in.length()==0) return -2;
- //ftpclient的put方法 调用后将路径传进去 返回TelnetOutputStream 就可以进行文件上传操作了
- os = ftpClient.put(newname);
- result = file_in.length();
- is = new FileInputStream(file_in);
- byte[] bytes = new byte[1024];
- int c;
- while ((c = is.read(bytes)) != -1) {
- os.write(bytes, 0, c);
- }
- } finally {
- if (is != null) {
- is.close();
- }
- if (os != null) {
- os.close();
- }
- }
- return result;
- }
- /**
- * upload
- * @throws java.lang.Exception
- * @return
- * @param filename
- */
- public long upload(String filename)
- throws Exception
- {
- String newname = "";
- if (filename.indexOf("/")>-1)
- {
- newname = filename.substring(filename.lastIndexOf("/")+1);
- }else
- {
- newname = filename;
- }
- return upload(filename,newname);
- }
- /**
- * download
- * 从ftp下载文件到本地
- * @throws java.lang.Exception
- * @return
- * @param newfilename 本地生成的文件名
- * @param filename 服务器上的文件名
- */
- public long download(String filename,String newfilename)
- throws Exception
- {
- long result = 0;
- TelnetInputStream is = null;
- FileOutputStream os = null;
- try
- {
- is = ftpClient.get(filename);
- java.io.File outfile = new java.io.File(newfilename);
- os = new FileOutputStream(outfile);
- byte[] bytes = new byte[1024];
- int c;
- while ((c = is.read(bytes)) != -1) {
- os.write(bytes, 0, c);
- result = result + c;
- }
- } catch (IOException e)
- {
- e.printStackTrace();
- }
- finally {
- if (is != null) {
- is.close();
- }
- if (os != null) {
- os.close();
- }
- }
- return result;
- }
- /**
- * 取得某个目录下的所有文件列表
- *
- */
- public List getFileList(String path)
- {
- List list = new ArrayList();
- try
- {
- DataInputStream dis = new DataInputStream(ftpClient.nameList(path));
- String filename = "";
- while((filename=dis.readLine())!=null)
- {
- list.add(filename);
- }
- } catch (Exception e)
- {
- e.printStackTrace();
- }
- return list;
- }
- /**
- * closeServer
- * 断开与ftp服务器的链接
- * @throws java.io.IOException
- */
- public void closeServer()
- throws IOException
- {
- try
- {
- if (ftpClient != null)
- {
- ftpClient.closeServer();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static void main(String [] args) throws Exception
- {
- FtpUtil ftp = new FtpUtil();
- try {
- //连接ftp服务器
- ftp.connectServer("172.19.11.103", "weblogic", "weblogic", "/home/files");
- ftp.createDir("files");
- /** 上传文件到 files 文件夹下 */
- System.out.println("filesize:"+ftp.upload("f:/download/Install.exe")+"字节");
- /** 取得files文件夹下的所有文件列表,并下载到 E盘下 */
- List list = ftp.getFileList(".");
- for (int i=0;i<list.size();i++)
- {
- String filename = (String)list.get(i);
- System.out.println(filename);
- ftp.download(filename,"E:/"+filename);
- }
- } catch (Exception e) {
- ///
- }finally
- {
- ftp.closeServer();
- }
- }
- //在ftp服务器上穿件文件夹
- public boolean createDir(String path) throws Exception{
- //进入到home文件夹下
- ftpClient.cd("/home");
- //创建远程文件夹
- //远程命令包括
- //USER PORT RETR ALLO DELE SITE XMKD CDUP FEAT<br>
- // PASS PASV STOR REST CWD STAT RMD XCUP OPTS<br>
- // ACCT TYPE APPE RNFR XCWD HELP XRMD STOU AUTH<br>
- // REIN STRU SMNT RNTO LIST NOOP PWD SIZE PBSZ<br>
- // QUIT MODE SYST ABOR NLST MKD XPWD MDTM PROT<br>
- // 在服务器上执行命令,如果用sendServer来执行远程命令(不能执行本地FTP命令)的话,所有FTP命令都要加上/r/n<br>
- // ftpclient.sendServer("XMKD /test/bb/r/n"); //执行服务器上的FTP命令<br>
- // ftpclient.readServerResponse一定要在sendServer后调用<br>
- // nameList("/test")获取指目录下的文件列表<br>
- // XMKD建立目录,当目录存在的情况下再次创建目录时报错<br>
- // XRMD删除目录<br>
- // DELE删除文件<br>
- //通过远程命令 穿件一个files文件夹
- ftpClient.sendServer("MKD "+ path + "/r/n");
- //这个方法必须在 这两个方法中间调用 否则 命令不管用
- ftpClient.binary();
- ftpClient.readServerResponse();
- return false;
- }
- }
java操作ftp 上传下载创建文件夹
最新推荐文章于 2024-04-24 22:52:03 发布