ftp的路径怎么设置

ftp的路径怎么设置,第1张

问一下,你是想做ftp上传下载么?首先你需要安装一个ftp服务端程序,启动起来,然后下载一个ftp客户端程序,测试能不能连接,首先这一块儿需要测试通过。代码ftp上传下载2.1 上传代码:import java.io.Fileimport java.io.FileInputStreamimport org.apache.commons.net.ftp.FTPClientimport org.apache.commons.net.ftp.FTPReplypublic class test {private FTPClient ftp/**** @param path 上传到ftp服务器哪个路径下* @param addr 地址* @param port 端口号* @param username 用户名* @param password 密码* @return* @throws Exception*/private boolean connect(String path,String addr,int port,String username,String password) throws Exception {boolean result = falseftp = new FTPClient()int replyftp.connect(addr,port)ftp.login(username,password)ftp.setFileType(FTPClient.BINARY_FILE_TYPE)reply = ftp.getReplyCode()if (!FTPReply.isPositiveCompletion(reply)) {ftp.disconnect()return result}ftp.changeWorkingDirectory(path)result = truereturn result}/**** @param file 上传的文件或文件夹* @throws Exception*/private void upload(File file) throws Exception{if(file.isDirectory()){ftp.makeDirectory(file.getName())ftp.changeWorkingDirectory(file.getName())String[] files = file.list()for (int i = 0i <files.lengthi++) {File file1 = new File(file.getPath()+"\\"+files[i] )if(file1.isDirectory()){upload(file1)ftp.changeToParentDirectory()}else{File file2 = new File(file.getPath()+"\\"+files[i])FileInputStream input = new FileInputStream(file2)ftp.storeFile(file2.getName(), input)input.close()}}}else{File file2 = new File(file.getPath())FileInputStream input = new FileInputStream(file2)ftp.storeFile(file2.getName(), input)input.close()}}public static void main(String[] args) throws Exception{test t = new test()t.connect("", "localhost", 21, "yhh", "yhhazr")File file = new File("e:\\uploadify")t.upload(file)}}2.2 下载代码这里没有用到filter,如果用filter就可以过滤想要的文件。public class Ftp { /*** @param args*/ public static void main(String[] args) { // TODO Auto-generated method stub Ftp ftp = new Ftp() String hostname = "www.strawberry.com" Integer port = 21 String username = "username" String password = "password" String remote = "/c.txt" String local = "/home/tin/LeonChen/FTP/" try { ftp.connect(hostname, port, username, password) System.out.println("接收状态:"+ftp.download(remote, local)) ftp.disconnect() } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace() } } private FTPClient ftpClient = new FTPClient() /** * 连接到FTP服务器 * * @param hostname 主机名 * * @param port 端口 * * @param username 用户名 * * @param password 密码 * * @return 是否连接成功 * * @throws IOException*/ private boolean connect(String hostname, int port, String username, String password) throws IOException { ftpClient.connect(hostname, port) ftpClient.setControlEncoding("UTF-8") if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { if (ftpClient.login(username, password)) { return true } } disconnect() return false } /** 从FTP服务器上下载文件,支持断点续传,上传百分比汇报* * @param remote 远程文件路径* * @param local 本地文件路径* * @return 上传的状态* * @throws IOException*/ public DownloadStatus download(String remote, String local) throws IOException { // 设置被动模式 ftpClient.enterLocalPassiveMode() // 设置以二进制方式传输 ftpClient.setFileType(FTP.BINARY_FILE_TYPE) DownloadStatus result // 检查远程文件是否存在 FTPFile[] files = ftpClient.listFiles(new String(remote .getBytes("UTF-8"), "iso-8859-1")) if (files.length != 1) { System.out.println("远程文件不存在") return DownloadStatus.Remote_File_Noexist } long lRemoteSize = files[0].getSize() String fildName = files[0].getName() // 本地存在文件,进行断点下载 File f = new File(local+fildName) if (f.exists()) { long localSize = f.length() if (localSize >= lRemoteSize) { System.out.println("本地文件大于远程文件,下载中止") return DownloadStatus.Local_Bigger_Remote } // 进行断点续传,并记录状态 FileOutputStream out = new FileOutputStream(f, true) ftpClient.setRestartOffset(localSize) InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1")) byte[] bytes = new byte[1024] long step = lRemoteSize / 100 long process = localSize / step int c while ((c = in.read(bytes)) != -1) { out.write(bytes, 0, c) localSize += c long nowProcess = localSize / step if (nowProcess >process) { process = nowProcess if (process % 10 == 0) System.out.println("下载进度:" + process) // TODO 更新文件下载进度,值存放在process变量中 } } in.close() out.close() boolean isDo = ftpClient.completePendingCommand() if (isDo) { result = DownloadStatus.Download_From_Break_Success } else { result = DownloadStatus.Download_From_Break_Failed }} else { OutputStream out = new FileOutputStream(f) InputStream in = ftpClient.retrieveFileStream(new String(remote.getBytes("UTF-8"), "iso-8859-1")) byte[] bytes = new byte[1024] long step = lRemoteSize / 100 long process = 0 long localSize = 0L int c while ((c = in.read(bytes)) != -1) { out.write(bytes, 0, c) localSize += c long nowProcess = localSize / step if (nowProcess >process) { process = nowProcess if (process % 10 == 0) System.out.println("下载进度:" + process) // TODO 更新文件下载进度,值存放在process变量中 } } in.close() out.close() boolean upNewStatus = ftpClient.completePendingCommand() if (upNewStatus) { result = DownloadStatus.Download_New_Success } else { result = DownloadStatus.Download_New_Failed } } return result } private void disconnect() throws IOException { if (ftpClient.isConnected()) { ftpClient.disconnect() } }}

地路径就是在电脑上的位置

远程路径就是服务器上你希望存放文件的位置,通常跟你得网站的虚拟路径一致,即,根目录就是你的网站的根目录。

给你得IP也许就是FTP服务器的地址吧。

package nc.ui.doc.doc_007

import java.io.File

import java.io.FileInputStream

import java.io.FileOutputStream

import java.io.IOException

import nc.itf.doc.DocDelegator

import nc.vo.doc.doc_007.DirVO

import nc.vo.pub.BusinessException

import nc.vo.pub.SuperVO

import org.apache.commons.net.ftp.FTPClient

import org.apache.commons.net.ftp.FTPFile

import org.apache.commons.net.ftp.FTPReply

import org.apache.commons.net.ftp.FTP

public class FtpTool {

private FTPClient ftp

private String romateDir = ""

private String userName = ""

private String password = ""

private String host = ""

private String port = "21"

public FtpTool(String url) throws IOException {

//String url="ftp://user:password@ip:port/ftptest/psd"

int len = url.indexOf("//")

String strTemp = url.substring(len + 2)

len = strTemp.indexOf(":")

userName = strTemp.substring(0, len)

strTemp = strTemp.substring(len + 1)

len = strTemp.indexOf("@")

password = strTemp.substring(0, len)

strTemp = strTemp.substring(len + 1)

host = ""

len = strTemp.indexOf(":")

if (len <0)//没有设置端口

{

port = "21"

len = strTemp.indexOf("/")

if (len >-1) {

host = strTemp.substring(0, len)

strTemp = strTemp.substring(len + 1)

} else {

strTemp = ""

}

} else {

host = strTemp.substring(0, len)

strTemp = strTemp.substring(len + 1)

len = strTemp.indexOf("/")

if (len >-1) {

port = strTemp.substring(0, len)

strTemp = strTemp.substring(len + 1)

} else {

port = "21"

strTemp = ""

}

}

romateDir = strTemp

ftp = new FTPClient()

ftp.connect(host, FormatStringToInt(port))

}

public FtpTool(String host, int port) throws IOException {

ftp = new FTPClient()

ftp.connect(host, port)

}

public String login(String username, String password) throws IOException {

this.ftp.login(username, password)

return this.ftp.getReplyString()

}

public String login() throws IOException {

this.ftp.login(userName, password)

System.out.println("ftp用户: " + userName)

System.out.println("ftp密码: " + password)

if (!romateDir.equals(""))

System.out.println("cd " + romateDir)

ftp.changeWorkingDirectory(romateDir)

return this.ftp.getReplyString()

}

public boolean upload(String pathname, String filename) throws IOException, BusinessException {

int reply

int j

String m_sfilename = null

filename = CheckNullString(filename)

if (filename.equals(""))

return false

reply = ftp.getReplyCode()

if (!FTPReply.isPositiveCompletion(reply)) {

ftp.disconnect()

System.out.println("FTP server refused connection.")

System.exit(1)

}

FileInputStream is = null

try {

File file_in

if (pathname.endsWith(File.separator)) {

file_in = new File(pathname + filename)

} else {

file_in = new File(pathname + File.separator + filename)

}

if (file_in.length() == 0) {

System.out.println("上传文件为空!")

return false

}

//产生随机数最大到99

j = (int)(Math.random()*100)

m_sfilename = String.valueOf(j) + ".pdf"// 生成的文件名

is = new FileInputStream(file_in)

ftp.setFileType(FTP.BINARY_FILE_TYPE)

ftp.storeFile(m_sfilename, is)

ftp.logout()

} finally {

if (is != null) {

is.close()

}

}

System.out.println("上传文件成功!")

return true

}

public boolean delete(String filename) throws IOException {

FileInputStream is = null

boolean retValue = false

try {

retValue = ftp.deleteFile(filename)

ftp.logout()

} finally {

if (is != null) {

is.close()

}

}

return retValue

}

public void close() {

if (ftp.isConnected()) {

try {

ftp.disconnect()

} catch (IOException e) {

e.printStackTrace()

}

}

}

public static int FormatStringToInt(String p_String) {

int intRe = 0

if (p_String != null) {

if (!p_String.trim().equals("")) {

try {

intRe = Integer.parseInt(p_String)

} catch (Exception ex) {

}

}

}

return intRe

}

public static String CheckNullString(String p_String) {

if (p_String == null)

return ""

else

return p_String

}

public boolean downfile(String pathname, String filename) {

String outputFileName = null

boolean retValue = false

try {

FTPFile files[] = ftp.listFiles()

int reply = ftp.getReplyCode()

////////////////////////////////////////////////

if (!FTPReply.isPositiveCompletion(reply)) {

try {

throw new Exception("Unable to get list of files to dowload.")

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

/////////////////////////////////////////////////////

if (files.length == 0) {

System.out.println("No files are available for download.")

}else {

for (int i=0i <files.lengthi++) {

System.out.println("Downloading file "+files[i].getName()+"Size:"+files[i].getSize())

outputFileName = pathname + filename + ".pdf"

//return outputFileName

File f = new File(outputFileName)

//////////////////////////////////////////////////////

retValue = ftp.retrieveFile(outputFileName, new FileOutputStream(f))

if (!retValue) {

try {

throw new Exception ("Downloading of remote file"+files[i].getName()+" failed. ftp.retrieveFile() returned false.")

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

}

}

}

/////////////////////////////////////////////////////////////

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace()

}

return retValue

}

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/806091.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-08-29
下一篇2023-08-29

发表评论

登录后才能评论

评论列表(0条)

    保存