在Java中进行网络文件传输,通常可以使用以下几种方法:
下面是使用这些方法的简单示例:
服务器端:
import java.io.*;
import java.net.*;
public class FileServer {
public static void main(String[] args) throws IOException {
int port = 12345;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server is listening on port " + port);
Socket socket = serverSocket.accept();
System.out.println("New client connected");
InputStream input = socket.getInputStream();
FileOutputStream output = new FileOutputStream("received_file.txt");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
output.close();
input.close();
socket.close();
serverSocket.close();
}
}
客户端:
import java.io.*;
import java.net.*;
public class FileClient {
public static void main(String[] args) throws IOException {
String serverAddress = "localhost";
int port = 12345;
String filePath = "file_to_send.txt";
Socket socket = new Socket(serverAddress, port);
FileInputStream input = new FileInputStream(filePath);
OutputStream output = socket.getOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
output.close();
input.close();
socket.close();
}
}
import java.io.*;
import java.net.*;
public class URLFileTransfer {
public static void main(String[] args) throws IOException {
String fileURL = "http://example.com/file_to_download.txt";
String saveDir = "downloads/";
URL url = new URL(fileURL);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.connect();
InputStream input = connection.getInputStream();
FileOutputStream output = new FileOutputStream(saveDir + "downloaded_file.txt");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
output.close();
input.close();
}
}
首先,需要添加Apache Commons Net库的依赖。如果使用Maven,可以在pom.xml中添加以下依赖:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.8.0</version>
</dependency>
然后,可以使用FTPClient类进行文件传输:
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import java.io.*;
public class FTPFileTransfer {
public static void main(String[] args) throws IOException {
String server = "ftp.example.com";
int port = 21;
String user = "username";
String pass = "password";
FTPClient ftpClient = new FTPClient();
ftpClient.connect(server, port);
ftpClient.login(user, pass);
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
InputStream inputStream = new FileInputStream("local_file.txt");
ftpClient.storeFile("remote_file.txt", inputStream);
inputStream.close();
ftpClient.logout();
ftpClient.disconnect();
}
}
Java NIO提供了更高效的I/O操作方式,可以使用java.nio.channels.FileChannel进行文件传输:
import java.io.*;
import java.net.*;
import java.nio.channels.*;
public class NIOFileTransfer {
public static void main(String[] args) throws IOException {
String host = "localhost";
int port = 12345;
String filePath = "file_to_send.txt";
SocketChannel socketChannel = SocketChannel.open(new InetSocketAddress(host, port));
FileChannel fileChannel = new FileInputStream(filePath).getChannel();
long fileSize = fileChannel.size();
long transferred = 0;
while (transferred < fileSize) {
transferred += fileChannel.transferTo(transferred, fileSize - transferred, socketChannel);
}
fileChannel.close();
socketChannel.close();
}
}
这些示例仅用于演示目的,实际应用中可能需要更多的错误处理和功能。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。