是否有人知道如何使用“魔术数字”或ascii值读取java中文件的标题以获取文件扩展名?
答案 0 :(得分:4)
也许不是你想要的答案,但是因为你给了我们很少的信息......
在unixoid系统(Linux,Mac,* BSD)中,你有file命令,
测试每个参数以尝试对其进行分类。按顺序执行三组测试:文件系统测试,魔术测试和语言测试。成功的第一个测试会导致打印文件类型。
E.g。
$ file linux-image-3.1.0-030100rc10-generic_3.1.0-030100rc10.201110200610_amd64.deb
linux-image-3.1.0-030100rc10-generic_3.1.0-030100rc10.201110200610_amd64.deb: Debian binary package (format 2.0)
使用Runtime.exec(...),您可以调用该程序并解析其输出。
确定给定文件是否为PNG:
import java.io.*;
public class IsPng {
public static void main(String ...filenames) throws Exception {
if(filenames.length == 0) {
System.err.println("Please supply filenames.");
return;
}
for(String filename : filenames) {
if(isPng(new File(filename))) {
System.out.println(filename + " is a png.");
} else {
System.out.println(filename + " is _not_ a png.");
}
}
}
private static final int MAGIC[] = new int[] { 0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a };
private static boolean isPng(File filename) throws Exception {
FileInputStream ins = new FileInputStream(filename);
try {
for(int i = 0; i < MAGIC.length; ++i) {
if(ins.read() != MAGIC[i]) {
return false;
}
}
return true;
} finally {
ins.close();
}
}
}
有时URLConnection.getContentType()也适用于本地文件:
new File(name).toURI().toURL().openConnection().getContentType()
但是您的评论听起来像是必须自己实施该方法,而不是使用外部程序(?)。
答案 1 :(得分:2)
您可以尝试JFileChooser。这是一个例子。
import java.io.*;
import javax.swing.*;
class GetFileType {
public static void main(String[] args){
JFileChooser chooser = new JFileChooser();
File file = new File("Hello.txt");
String fileTypeName = chooser.getTypeDescription(file);
System.out.println("File Type= "+fileTypeName);
}
}
这将输出文本文档。如果是传递的MP3文件,那么输出将是MP3格式声音。