【问题标题】:Using readAllBytes to read a file's bytes, but output is not changing when I change the file使用 readAllBytes 读取文件的字节,但是当我更改文件时输出没有改变
【发布时间】:2021-07-03 13:15:36
【问题描述】:

如果我有一个名为“files”的目录,并且其中有 2 个 txt 文件。这些文件具有不同的名称,但具有相同的确切内容。使用此代码,当我读取所有字节时,我没有得到相同的字节 []。打印字节时是否应该得到相同的输出?如果不是,我可以使用什么方法以这种方式比较字节链?我正在尝试这样做:如果我有 2 个文件的内容 共同 但不完全相同,在这种情况下,我是否应该在两个字节链中也有共同点?什么方法可以做到这一点?

public class Main {
    public static final File CWD = new File(System.getProperty("user.dir"));
    public static final File files = new File(CWD, "files");

    public static void main(String[] args) {
        for (File file: files.listFiles()){
            try {
                byte[] bytes = Files.readAllBytes(file.toPath());
                System.out.println(bytes);
                System.out.println(file.toString());
            }
            catch (IOException e){
                System.out.println("File is empty");
            }
        }
    }
}

【问题讨论】:

    标签: java arrays file byte


    【解决方案1】:

    您正在尝试将 byte[] 打印为使用 String.valueOf(bytes) 的字符串,并显示为:[B@23ab930d,即[B,后跟数组的哈希码。因此不同的字节数组有不同的字符串值。比较这些:

    byte[]a=new byte[]{65};
    System.out.println(new String(a));
    => A
    System.out.println(a);
    // Prints something like:
    [B@6438a396
    

    更改为打印字节数组contents转换为字符串:

    System.out.println(new String(bytes));
    

    或者:直接将文本文件作为字符串读取:

    String contents = Files.readString(file.toPath());
    System.out.println(contents);
    

    【讨论】:

    • 我明白了。谢谢。那么如果我想比较文件中的字节链(不一定是 txt 文件),我会使用什么?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2021-12-22
    • 2021-05-04
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    相关资源
    最近更新 更多