我正在尝试使用以下方法使用Java识别特定的文件类型。我需要在我的Web应用程序中实现这些功能。
package filetype;
import java.io.File;
import java.net.URLConnection;
final public class FileType
{
public static void main(String[] args)
{
File temp=new File("G:/mountain.jpg");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
temp=new File("G:/myFile.txt");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
temp=new File("G:/zipByJava.zip");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
temp=new File("G:/MLM/Login.aspx");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
temp=new File("G:/power_point.pptx");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
temp=new File("G:/excel_sheet.xlsx");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
temp=new File("G:/word_document.docx");
System.out.println(URLConnection.guessContentTypeFromName(temp.getAbsolutePath()));
}
}
它在控制台上显示以下输出。
image/jpeg
text/plain
application/zip
null
null
null
null
在最后四种情况下,它显示null
并且无法识别给定文件的文件类型。在Java中识别特定文件类型的最佳方法是什么?
答案 0 :(得分:4)
使用
Files.probeContentType()
为您认为会遇到的任何奇怪的球类型添加自定义探测器。
编辑:
这是oracle JavaDoc for v7
答案 1 :(得分:0)
这是我使用外部活动打开文件的方法:
private void openFileWithExternalActivity(String path) {
if (path == null) {
return;
}
File file = new File(path);
if (file.exists()) {
Intent target = new Intent(Intent.ACTION_VIEW);
Uri uri = FileProvider.getUriForFile(view.getActivity(), BuildConfig.APPLICATION_ID + ".provider", file);
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
target.setDataAndType(uri, mimeType);
target.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
try {
view.getActivity().startActivity(target);
} catch (ActivityNotFoundException e) {
// TODO Instruct the user to install a viewer here
Log.e("No viewer found", e);
}
}
}
说明
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
确定 mime 类型