怎么获取ftp的路径
问一下,你是想做ftp上传下载么?
首先你需要安装一个ftp服务端程序,启动起来,然后下载一个ftp客户端程序,测试能不能连接,首先这一块儿需要测试通过。
代码ftp上传下载
21 上传代码:
import javaioFile;
import javaioFileInputStream;
import orgapachecommonsnetftpFTPClient;
import orgapachecommonsnetftpFTPReply;
public 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 = false;
ftp = new FTPClient();
int reply;
ftpconnect(addr,port);
ftplogin(username,password);
ftpsetFileType(FTPClientBINARY_FILE_TYPE);
reply = ftpgetReplyCode();
if (!FTPReplyisPositiveCompletion(reply)) {
ftpdisconnect();
return result;
}
ftpchangeWorkingDirectory(path);
result = true;
return result;
}
/
@param file 上传的文件或文件夹
@throws Exception
/
private void upload(File file) throws Exception{
if(fileisDirectory()){
ftpmakeDirectory(filegetName());
ftpchangeWorkingDirectory(filegetName());
String[] files = filelist();
for (int i = 0; i < fileslength; i++) {
File file1 = new File(filegetPath()+"\\"+files[i] );
if(file1isDirectory()){
upload(file1);
ftpchangeToParentDirectory();
}else{
File file2 = new File(filegetPath()+"\\"+files[i]);
FileInputStream input = new FileInputStream(file2);
ftpstoreFile(file2getName(), input);
inputclose();
}
}
}else{
File file2 = new File(filegetPath());
FileInputStream input = new FileInputStream(file2);
ftpstoreFile(file2getName(), input);
inputclose();
}
}
public static void main(String[] args) throws Exception{
test t = new test();
tconnect("", "localhost", 21, "yhh", "yhhazr");
File file = new File("e:\\uploadify");
tupload(file);
}
}
22 下载代码
这里没有用到filter,如果用filter就可以过滤想要的文件。
public class Ftp {
/
@param args
/
public static void main(String[] args) {
// TODO Auto-generated method stub
Ftp ftp = new Ftp();
String hostname = "wwwstrawberrycom";
Integer port = 21;
String username = "username";
String password = "password";
String remote = "/ctxt";
String local = "/home/tin/LeonChen/FTP/";
try {
ftpconnect(hostname, port, username, password);
Systemoutprintln("接收状态:"+ftpdownload(remote, local));
ftpdisconnect();
} catch (IOException e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
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 {
ftpClientconnect(hostname, port);
ftpClientsetControlEncoding("UTF-8");
if (FTPReplyisPositiveCompletion(ftpClientgetReplyCode())) {
if (ftpClientlogin(username, password)) {
return true;
}
}
disconnect();
return false;
}
/
从FTP服务器上下载文件,支持断点续传,上传百分比汇报
@param remote 远程文件路径
@param local 本地文件路径
@return 上传的状态
@throws IOException
/
public DownloadStatus download(String remote, String local)
throws IOException {
// 设置被动模式
ftpCliententerLocalPassiveMode();
// 设置以二进制方式传输
ftpClientsetFileType(FTPBINARY_FILE_TYPE);
DownloadStatus result;
// 检查远程文件是否存在
FTPFile[] files = ftpClientlistFiles(new String(remote
getBytes("UTF-8"), "iso-8859-1"));
if (fileslength != 1) {
Systemoutprintln("远程文件不存在");
return DownloadStatusRemote_File_Noexist;
}
long lRemoteSize = files[0]getSize();
String fildName = files[0]getName();
// 本地存在文件,进行断点下载
File f = new File(local+fildName);
if (fexists()) {
long localSize = flength();
if (localSize >= lRemoteSize) {
Systemoutprintln("本地文件大于远程文件,下载中止");
return DownloadStatusLocal_Bigger_Remote;
}
// 进行断点续传,并记录状态
FileOutputStream out = new FileOutputStream(f, true);
ftpClientsetRestartOffset(localSize);
InputStream in = ftpClientretrieveFileStream(new String(remotegetBytes("UTF-8"), "iso-8859-1"));
byte[] bytes = new byte[1024];
long step = lRemoteSize / 100;
long process = localSize / step;
int c;
while ((c = inread(bytes)) != -1) {
outwrite(bytes, 0, c);
localSize += c;
long nowProcess = localSize / step;
if (nowProcess > process) {
process = nowProcess;
if (process % 10 == 0)
Systemoutprintln("下载进度:" + process);
// TODO 更新文件下载进度,值存放在process变量中
}
}
inclose();
outclose();
boolean isDo = ftpClientcompletePendingCommand();
if (isDo) {
result = DownloadStatusDownload_From_Break_Success;
} else {
result = DownloadStatusDownload_From_Break_Failed;
}
} else {
OutputStream out = new FileOutputStream(f);
InputStream in = ftpClientretrieveFileStream(new String(remotegetBytes("UTF-8"), "iso-8859-1"));
byte[] bytes = new byte[1024];
long step = lRemoteSize / 100;
long process = 0;
long localSize = 0L;
int c;
while ((c = inread(bytes)) != -1) {
outwrite(bytes, 0, c);
localSize += c;
long nowProcess = localSize / step;
if (nowProcess > process) {
process = nowProcess;
if (process % 10 == 0)
Systemoutprintln("下载进度:" + process);
// TODO 更新文件下载进度,值存放在process变量中
}
}
inclose();
outclose();
boolean upNewStatus = ftpClientcompletePendingCommand();
if (upNewStatus) {
result = DownloadStatusDownload_New_Success;
} else {
result = DownloadStatusDownload_New_Failed;
}
}
return result;
}
private void disconnect() throws IOException {
if (ftpClientisConnected()) {
ftpClientdisconnect();
}
}
}
在java中获得文件的路径在我们做上传文件操作时是不可避免的。 web 上运行 1:thisgetClass()getClassLoader()getResource("/")getPath(); thisgetClass()getClassLoader()getResource("")getPath(); 得到的是 ClassPath的绝对URI路径。
以工程名为TEST为例:
(1)得到包含工程名的当前页面全路径:requestgetRequestURI(),结果:/TEST/testjsp。
(2)得到工程名:requestgetContextPath(),结果:/TEST。
(3)得到当前页面所在目录下全名称:requestgetServletPath()。结果:如果页面在jsp目录下 /TEST/jsp/testjsp。
(4)得到页面所在服务器的全路径:applicationgetRealPath("页面jsp"),结果D:/resin/webapps/TEST/testjsp。
(5)得到页面所在服务器的绝对路径:absPath=new javaioFile(applicationgetRealPath(requestgetRequestURI()))getParent();
结果:D:/resin/webapps/TEST。
拓展:在类中取得路径的方法
(1)类的绝对路径:String u=ClassclassgetClass()getResource("/")getPath()
结果:/D:/TEST/WebRoot/WEB-INF/classes/pack/
(2)得到工程的路径:SystemgetProperty("userdir")
结果:D:/TEST
如果没有记错的话,在servlet中
getServletContext()getContextPath()
如果在jsp中
${pageContextservletContextcontextPath}
0条评论