用java生成一个ftp传输,带加载条
时间: 2024-02-21 22:57:19 浏览: 20
您可以使用Apache Commons Net库来实现FTP传输,同时使用Swing库来实现FTP上传进度条。以下是一个简单的示例代码:
```java
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.swing.JFrame;
import javax.swing.JProgressBar;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public class FtpTransfer extends JFrame {
private JProgressBar progressBar;
private FTPClient ftpClient;
public FtpTransfer() {
progressBar = new JProgressBar(0, 100);
add(progressBar);
setSize(300, 100);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void transfer(File file, String server, String user, String password, String remotePath) throws IOException {
ftpClient = new FTPClient();
ftpClient.connect(server);
ftpClient.login(user, password);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
FileInputStream inputStream = new FileInputStream(file);
OutputStream outputStream = ftpClient.storeFileStream(remotePath + "/" + file.getName());
long fileSize = file.length();
long uploadedSize = 0;
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
uploadedSize += bytesRead;
int progress = (int) (uploadedSize * 100 / fileSize);
progressBar.setValue(progress);
}
inputStream.close();
outputStream.close();
ftpClient.completePendingCommand();
ftpClient.logout();
ftpClient.disconnect();
}
public static void main(String[] args) {
FtpTransfer ftpTransfer = new FtpTransfer();
File file = new File("example.txt");
String server = "ftp.example.com";
String user = "username";
String password = "password";
String remotePath = "/";
try {
ftpTransfer.transfer(file, server, user, password, remotePath);
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
在这个示例代码中,我们首先创建了一个带有进度条的 Swing 窗口,然后使用 FTPClient 类连接到 FTP 服务器。在文件传输过程中,我们使用 FileInputStream 和 OutputStream 来读写文件,同时更新进度条。在传输完成后,我们关闭输入输出流,完成 FTP 传输过程。