Path.of上面的Path.of报错了Cannot resolve method 'of' in 'Path'更换java8也是会报错Cannot resolve method 'of' in 'Path'请换一种方式实现java读取读取url如http://18.0.0.9:8080/test/wf.tar,这个url是一个下载连接会下载一个不带文件类型的压缩包里面有两个文件,java怎么样实现读取这个url把重命名的压缩包的里面的两个文件的每个文件MD5值返回 不用Path.of
如果你使用的是 Java 8,Path.of
应该是可以用的。但如果仍然出现问题,可以尝试使用 Paths.get
来代替。下面是一个简单的例子,演示如何从 URL 中下载压缩包,解压并计算每个文件的 MD5 值:
import java.io.InputStream;
import java.net.URL;
import java.nio.file.*;
import java.security.MessageDigest;
public class Main {
public static void main(String[] args) {
try {
// 定义 URL 和本地文件名
String url = "http://18.0.0.9:8080/test/wf.tar";
String localFileName = "downloadedFile.tar";
// 下载文件
downloadFile(url, localFileName);
// 解压文件
String extractedDir = "extractedFiles";
extractTarGz(localFileName, extractedDir);
// 计算 MD5
calculateMD5(extractedDir);
} catch (Exception e) {
e.printStackTrace();
}
}
private static void downloadFile(String url, String localFileName) throws Exception {
try (InputStream in = new URL(url).openStream()) {
Files.copy(in, Paths.get(localFileName), StandardCopyOption.REPLACE_EXISTING);
}
}
private static void extractTarGz(String archivePath, String destDir) throws Exception {
try (InputStream in = Files.newInputStream(Paths.get(archivePath));
GzipCompressorInputStream gzipIn = new GzipCompressorInputStream(in);
TarArchiveInputStream tarIn = new TarArchiveInputStream(gzipIn)) {
ArchiveEntry entry;
while ((entry = tarIn.getNextEntry()) != null) {
if (entry.isDirectory()) {
continue;
}
Path entryPath = Paths.get(destDir, entry.getName());
Files.copy(tarIn, entryPath, StandardCopyOption.REPLACE_EXISTING);
}
}
}
private static void calculateMD5(String directory) throws Exception {
Files.walk(Paths.get(directory))
.filter(Files::isRegularFile)
.forEach(file -> {
try {
byte[] fileBytes = Files.readAllBytes(file);
String md5 = calculateMD5(fileBytes);
System.out.println("File: " + file.getFileName() + ", MD5: " + md5);
} catch (Exception e) {
e.printStackTrace();
}
});
}
private static String calculateMD5(byte[] data) throws Exception {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(data);
byte[] mdBytes = md.digest();
// convert the byte to hex format
StringBuilder sb = new StringBuilder();
for (byte mdByte : mdBytes) {
sb.append(Integer.toString((mdByte & 0xff) + 0x100, 16).substring(1));
}
return sb.toString();
}
}
上面的代码中使用了 Paths.get
来代替 Path.of
,同时引入了 GzipCompressorInputStream
和 TarArchiveInputStream
类来处理 tar.gz 压缩包。确保你的项目中已经包含了这些依赖。