ftpclient過濾文件
『壹』 java中的FTPClient可以遠程讀取文件嗎 FTPClient中有獲取文件最後修改時間的方法嗎 謝謝
要是基礎不很好推薦西安劉凱的視頻去看看,電驢上有,希望可以幫到你
『貳』 請教FtpClient刪除ftp伺服器上的文件問題
這個問題應該是正常的,因為你在系統中刪除文件時操作系統來做這件事,而在ftp中刪除文件時ftp伺服器做這件事,操作系統和ftp伺服器屬於兩種對文件的機制,你可以嘗試在ftp伺服器上設置是否有刪除文件進入回收站而不是直接刪除
『叄』 執行ftpclient.listfiles(path)時,文件名中如果帶有中括弧就無法找到文件
這是因為Java中中括弧用於數組索引,需要轉義才能用在字元串內。在這里中括弧[]應改為\[\]。如下代碼:
new File("text/info\[creeper\].txt");
『肆』 java里使用ftpClient的被動方式訪問ftp伺服器讀取一系列文件夾,只有第一個內容能讀到,其他讀不到
你basePath應該有問題,basePath應該指向要刪除目錄的上一級目錄.
『伍』 java FTPClient如何刪除遠程伺服器端的文件夾及其子文件夾及其內容!
假如文件夾裡面有文件的話,ftpclient根本刪除不了文件夾,不像其他api可以自動遞歸刪除,所以得先刪除文件夾裡面的文件,然後在刪除文件夾,
刪除之前記得改變下工作目錄 fileName是dirName裡面的文件
ftpClient.changeWorkingDirectory(remoteDir+dirName)
刪除文件命令:ftpClient.deleteFile(fileName);
刪除完文件後更改目錄ftpClient.changeWorkingDirectory(remoteDir)
刪除文件夾命令:ftpClient.removeDirectory(dirName);
『陸』 linux環境下,在java中用sun.net.ftp.FtpClient類去讀取文件名含有「點號」的文件時報錯找不到文件
採用轉義字元,\
『柒』 FtpClient 禁止同一用戶同一時間下載同一文件
下載速度還得看對方伺服器的,不同伺服器不同運營商線路,下線速度都會不一樣的
『捌』 ftpClient刪除文件夾的問題
新增類 Ftp 繼承org.apache.commons.net.ftp.FTPFile
public boolean removeAll(String pathname) {
try {
FTPFile[] files = this.listFiles(pathname);
for (FTPFile f : files) {
if (f.isDirectory()) {
this.removeAll(pathname + "/" + f.getName());
this.removeDirectory(pathname);
}
if (f.isFile()) {
this.deleteFile(pathname + "/" + f.getName());
}
}
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
『玖』 FTPClient類的listFile()卡住了,啥原因啊
這個方法要和ftp伺服器通訊,執行list命令,因此如果網路不通、伺服器沒登陸等都可能導致調用阻塞、出錯等,你手工ftp登陸伺服器試一下。
『拾』 java在瀏覽器上獲取FTP讀文件路徑
問一下,你是想做ftp上傳下載么?
首先你需要安裝一個ftp服務端程序,啟動起來,然後下載一個ftp客戶端程序,測試能不能連接,首先這一塊兒需要測試通過。
代碼ftp上傳下載
2.1 上傳代碼:
import java.io.File;
import java.io.FileInputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
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;
ftp.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 = true;
return 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 = 0; i < files.length; i++) {
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();
}
}
}