Java传输,保证文件的正确性,不需要更改
时间: 2024-03-26 12:42:13 浏览: 7
在Java中进行文件传输,可以使用Java IO库中的类进行实现。为了保证文件传输的正确性,可以使用校验和(checksum)的方法进行验证。
以下是一个Java示例代码,可以实现在两个FTP服务器之间进行文件传输并使用校验和验证文件的正确性:
```java
import java.io.*;
import java.net.*;
import java.util.zip.CRC32;
public class FileTransfer {
private static final int BUFFER_SIZE = 1024;
private static final int TIMEOUT = 3000;
public static void main(String[] args) throws IOException {
// 连接到第一个FTP服务器
String server1 = "ftp.server1.com";
String username1 = "user1";
String password1 = "password1";
String remoteFilePath1 = "/path/to/file1.txt";
String localFilePath1 = "/path/to/local/file1.txt";
FTPClient ftp1 = new FTPClient();
ftp1.connect(server1);
ftp1.login(username1, password1);
ftp1.enterLocalPassiveMode();
ftp1.setFileType(FTP.BINARY_FILE_TYPE);
// 下载第一个文件
OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(localFilePath1));
InputStream inputStream1 = ftp1.retrieveFileStream(remoteFilePath1);
byte[] buffer1 = new byte[BUFFER_SIZE];
int bytesRead1;
while ((bytesRead1 = inputStream1.read(buffer1)) != -1) {
outputStream1.write(buffer1, 0, bytesRead1);
}
outputStream1.close();
inputStream1.close();
// 断开第一个FTP服务器连接
ftp1.logout();
ftp1.disconnect();
// 计算第一个文件的校验和
CRC32 crc1 = new CRC32();
FileInputStream fileInputStream1 = new FileInputStream(localFilePath1);
byte[] buffer2 = new byte[BUFFER_SIZE];
int bytesRead2;
while ((bytesRead2 = fileInputStream1.read(buffer2)) != -1) {
crc1.update(buffer2, 0, bytesRead2);
}
fileInputStream1.close();
long checksum1 = crc1.getValue();
// 连接到第二个FTP服务器
String server2 = "ftp.server2.com";
String username2 = "user2";
String password2 = "password2";
String remoteFilePath2 = "/path/to/file2.txt";
String localFilePath2 = "/path/to/local/file2.txt";
FTPClient ftp2 = new FTPClient();
ftp2.connect(server2);
ftp2.login(username2, password2);
ftp2.enterLocalPassiveMode();
ftp2.setFileType(FTP.BINARY_FILE_TYPE);
// 上传第一个文件到第二个FTP服务器
InputStream inputStream2 = new FileInputStream(localFilePath1);
OutputStream outputStream2 = ftp2.storeFileStream(remoteFilePath2);
byte[] buffer3 = new byte[BUFFER_SIZE];
int bytesRead3;
while ((bytesRead3 = inputStream2.read(buffer3)) != -1) {
outputStream2.write(buffer3, 0, bytesRead3);
}
inputStream2.close();
outputStream2.close();
// 计算第二个文件的校验和
CRC32 crc2 = new CRC32();
InputStream inputStream3 = ftp2.retrieveFileStream(remoteFilePath2);
byte[] buffer4 = new byte[BUFFER_SIZE];
int bytesRead4;
while ((bytesRead4 = inputStream3.read(buffer4)) != -1) {
crc2.update(buffer4, 0, bytesRead4);
}
inputStream3.close();
long checksum2 = crc2.getValue();
// 断开第二个FTP服务器连接
ftp2.logout();
ftp2.disconnect();
// 比较两个校验和
if (checksum1 == checksum2) {
System.out.println("File transfer successful.");
} else {
System.out.println("File transfer failed.");
}
}
}
```
以上代码中使用了CRC32类来计算校验和,CRC32是一种常见的校验和算法,可以用于验证数据的完整性。在文件传输过程中,我们先下载第一个文件并计算校验和,然后上传文件到第二个FTP服务器并再次计算校验和,最后比较两个校验和是否相等,如果相等则说明文件传输成功。