/workspace/111/src/Main.java:5: 错误: 类 MD5 是公共的, 应在名为 MD5.java 的文件中声明 public class MD5 请修改代码并给出改正后的正确完整代码
时间: 2024-12-17 15:39:24 浏览: 10
JAVA-workspace:JAVA Gui示例(不是我的)
根据您提供的错误信息和文档内容,确实存在一个编译错误。Java 规定如果一个类是 `public` 的,那么这个类必须定义在一个与类同名的 `.java` 文件中。因此,您需要将 `MD5` 类移动到一个名为 `MD5.java` 的文件中。
以下是修正后的完整代码:
### MD5.java
```java
import java.io.File;
import java.io.FileInputStream;
import java.security.MessageDigest;
public class MD5 {
static char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
public static String getMD5(File file) {
FileInputStream fis = null;
try {
MessageDigest md = MessageDigest.getInstance("MD5");
fis = new FileInputStream(file);
byte[] buffer = new byte[2048];
int length = -1;
while ((length = fis.read(buffer)) != -1) {
md.update(buffer, 0, length);
}
byte[] b = md.digest();
return byteToHexString(b);
} catch (Exception ex) {
ex.printStackTrace();
return null;
} finally {
try {
if (fis != null) {
fis.close();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
private static String byteToHexString(byte[] tmp) {
char str[] = new char[16 * 2]; // 每个字节用16进制表示的话,使用两个字符
int k = 0; // 表示转换结果中对应的字符位置
for (int i = 0; i < 16; i++) {
// 从第一个字节开始,对MD5的每一个字节
// 转换成16进制字符的转换
byte byte0 = tmp[i];
str[k++] = hexDigits[(byte0 >>> 4) & 0xf]; // 取字节中高4位的数字转换
str[k++] = hexDigits[byte0 & 0xf]; // 取字节中低4位的数字转换
}
return new String(str); // 转换后的结果转换为字符串
}
public static void main(String args[]) {
System.out.println(getMD5(new File("D://EditPlus.exe")));
}
}
```
### 主要修改点:
1. **文件名**:将 `MD5` 类放在一个名为 `MD5.java` 的文件中。
2. **代码格式**:修复了文档中的语法错误和格式问题,例如 `t` 和 `}` 的乱码问题。
3. **资源关闭**:在 `finally` 块中检查 `fis` 是否为 `null`,以避免空指针异常。
请将上述代码保存为 `MD5.java` 并重新编译运行。这样应该可以解决您的问题。
阅读全文