我正在使用一个始终向我发送普通/文本文件的网络服务。但是,该文件可以是 zip 或 csv ,但我事先没有被告知其类型。
当然,有一种方法可以通过编程方式查看其内容来了解文件类型。一个是字节代码,另一个是实际可重复的文本。
我已经考虑过在文件内容中查找大量逗号,但这似乎不准确。
答案 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"));
}
}