我正在开发一个校验和生成器应用程序。目前,我将其设计为提供字符串值的 SHA/MD5 输出。我想知道您是否可以导入文件,这样它也可以通过为导入的文件创建哈希值来充当完整性检查器。谢谢。
user2529236
问问题
1839 次
3 回答
1
你在找这样的东西吗
FileDialog fd = new FileDialog(parent, "Choose a file", FileDialog.LOAD);
fd.setDirectory("C:\\");
fd.setFile("*.java");
fd.setVisible(true);
String filename = fd.getFile();
if (filename == null)
System.out.println("file not selected");
else
System.out.println("You chose " + filename);
你也可以使用JFileChooser
于 2013-06-29T11:31:07.213 回答
0
使用 JFileChooser
JFileChooser fileDlg = new JFileChooser();
fileDlg.showOpenDialog(this);
String filename = fileDlg.getSelectedFile().getAbsolutePath();
jTextField1.setText(filename);
FileInputStream fis = new FileInputStream(filename);
byte buffer[] = new byte[fis.available()];
fis.read(buffer);
String message = new String(buffer);
jTextArea1.setText(message);
于 2013-06-29T11:45:19.550 回答
0
我想你需要类似的东西来处理文件:
import org.apache.commons.codec.binary.Hex;
import javax.swing.*;
import java.io.*;
import java.security.DigestInputStream;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
public class Application {
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
JFileChooser chooser = new JFileChooser();
int result = chooser.showOpenDialog(null);
if (JFileChooser.APPROVE_OPTION == result){
File file = chooser.getSelectedFile();
MessageDigest digest = MessageDigest.getInstance("MD5");
try (InputStream is = new FileInputStream(file)) {
DigestInputStream dis = new DigestInputStream(new BufferedInputStream(is), digest);
while (dis.read() != -1){}
}
JOptionPane.showMessageDialog(null, Hex.encodeHexString(digest.digest()));
}
}
}
关键是文件可能非常大,因此您不应该将完整的文件内容读入内存。此实现流式传输文件,因此它没有大的内存占用。它还演示了如何使用 JFileChooser 来完成任务。
于 2013-06-29T11:58:52.290 回答