我需要将大型文本文件导入数据库。该文本文件的结构是使用多个分隔符和全部预定义的。我只需要检查给定的文件是否是文本文件(无论扩展名如何)。
怎么可能使用Java?
在独立的 Java 应用程序中
Java 1.6 或更低版本 ( java.io.File
)
File file = new File("/myFolder/myFile");
InputStream is = new BufferedInputStream(new FileInputStream(file));
String mimeType = URLConnection.guessContentTypeFromStream(is);
Java 1.7 或更高版本(java.nio.file.Path
- 通过安装FileTypeDetector
调用java.nio.file.Files.probeContentType()
Path path = FileSystems.getDefault().getPath("myFolder", "myFile");
String mimeType = Files.probeContentType(path);
在与框架无关的 Web 应用程序中
使用JMimeMagic或Apache Tika之类的第 3 方库,如本答案中所述:
InputStream is = uploadedFile.getInputStream();
String mimeType = Magic.getMagicMatch(is, false).getMimeType();
在 Struts2 Web 应用程序中
通过 Struts2FileUploadInterceptor.setAllowedTypes()
<!--
Configured either
- globally to a package or
- locally to an Action
in Struts.xml
-->
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/png,image/gif,image/jpeg</param>
</interceptor-ref>
Web 应用程序中的客户端
withHTML5
的accept
属性<input type="file" />
(如本答案中所述)
<input type="file" accept="image/*,video/*">
请随时注意我可能忘记的内容,我很乐意将其包含在此处。
我认为您可以管理的最好的方法是检查文件中的每个字节是否对应于您期望的字符集中的有效字符。
例如,如果您认为这是一个 UTF-8 编码的文本文件,您可以尝试这样的操作来“验证”每个字节:
try {
Charset.availableCharsets().get("UTF-8").newDecoder()
.decode(ByteBuffer.wrap(bytesFromFile));
// was valid
} catch (CharacterCodingException e) {
// wasn't valid
}