Java - 从CSV文件中区分ZIP文件

时间:2016-12-01 09:32:00

标签: java

我正在使用一个始终向我发送普通/文本文件的网络服务。但是,该文件可以是 zip csv ,但我事先没有被告知其类型。

当然,有一种方法可以通过编程方式查看其内容来了解​​文件类型。一个是字节代码,另一个是实际可重复的文本。

我已经考虑过在文件内容中查找大量逗号,但这似乎不准确。

2 个答案:

答案 0 :(得分:5)

您可以使用java.util.zip.ZipFile,如果构造函数抛出ZipException,则它不是zip文件...

try(ZipFile zip = new ZipFile(filename)) {
    // It's a zip file
}
catch(ZipException e) {
    // Not a valid zip
}

答案 1 :(得分:2)

您可以使用ZIP文件结构。 根据{{​​3}},每个文件应以字节开头:0x04 0x03 0x4b 0x50。

您还可以使用MIME检测库,例如file header import org.apache.tika.Tika;     import org.apache.tika.mime.MediaType;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class Detect {

    /**
     * Resolves the MediaType using Tika and prints it to the standard output.
     * @param file the path of the file to probe.
     * @throws IOException whenever an I/O exception occurs.
     */
    private void detect(Path file) throws IOException {
        Tika tika = new Tika();
        try(InputStream is = Files.newInputStream(file)){
            MediaType mediaType = MediaType.parse(tika.detect(is));
            System.out.println(mediaType);
        }
    }

    public static void main(String[] args) throws IOException {
        Detect d = new Detect();
        d.detect(Paths.get("zip_file"));
        d.detect(Paths.get("csv_file"));
    }
}