【问题标题】:Program doesn't work correctly when spaces in file path文件路径中有空格时程序无法正常工作
【发布时间】:2016-08-05 00:30:08
【问题描述】:

我正在使用 Java 程序来生成文件哈希。代码如下:

package main;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.nio.file.Files;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class File_Hash_Generator {
    final protected static char[] hexArray = "0123456789ABCDEF".toCharArray();
    public static String bytesToHex(byte[] bytes) {
        char[] hexChars = new char[bytes.length * 2];
        for (int j = 0; j < bytes.length; j++) {
            int v = bytes[j] & 0xFF;
            hexChars[j * 2] = hexArray[v >>> 4];
            hexChars[j * 2 + 1] = hexArray[v & 0x0F];
        }
        return new String(hexChars);
    }
    public static void main(String args[]) throws IOException {
    Scanner inputScanner = new Scanner(System.in);
    String[] hashAlgos = { "MD2", "MD5", "SHA-1", "SHA-256", "SHA-384", "SHA-512" };
    System.out.print("File Path: ");
    String input = inputScanner.next();
    input = input.replace("\"", "");
    System.out.println();
    try {
        byte[] fileContents = Files.readAllBytes(new File(input).toPath());
        for (String algo : hashAlgos) {
            MessageDigest md = MessageDigest.getInstance(algo);
            byte[] hash = md.digest(fileContents);
            System.out.printf("%s %s%n", algo, bytesToHex(hash));
        }
    } catch (NoSuchAlgorithmException | IOException e) {
    }
}
}

由于某种原因,当我输入文件或文件夹有空格的路径时,例如:

"C:\Users\User\Downloads\ToBeScanned\DAY N NIGHT.mp3"

程序没有正确运行,而是直接终止而不生成任何哈希值。

编辑:有人提出我的问题与this question 重复。但是,我不知道在这种情况下这个其他答案如何帮助我。如果有人可以向我解释如何使用这个单独的答案来更改我的代码来解决我的问题,我将不胜感激。

非常感谢任何解决此问题的帮助,谢谢。

【问题讨论】:

  • 这不是明智之举} catch (NoSuchAlgorithmException | IOException e) { } 不要默默吞下你的例外
  • 只是一个附带问题。当您将所有“\”替换为“”时,FIles.readAllBytes[...} 如何工作?
  • @sascha10000 在某些情况下,当我复制文件路径时,路径被双引号括起来。你所说的是当我删除那些周围的引号时。它不会影响程序的功能......而且,replace("\"", "") 不会替换斜杠,它会替换双引号。
  • @AleksandarĐokić 如果您能解释我如何使用该问题选择的答案来修复我的代码,我将不胜感激。

标签: java hash


【解决方案1】:

而不是这样做:String input = inputScanner.next();

我可以:String input = inputScanner.nextLine();

这允许读取空格。 this question 中指出了解决方案。

【讨论】:

  • 什么都不需要解释。很高兴你解决了问题
猜你喜欢
  • 2015-04-03
  • 2015-07-20
  • 2016-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-27
  • 2012-11-07
相关资源
最近更新 更多