我需要将大文本文件导入数据库。 该文本文件的结构是预定义的,使用几个分隔符和所有。 我只需要检查给定文件是否是文本文件(无论扩展名如何)。
如何使用Java?
答案 0 :(得分:8)
在独立的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等第三方库,如this中所述:
InputStream is = uploadedFile.getInputStream();
String mimeType = Magic.getMagicMatch(is, false).getMimeType();
在Struts2网络应用程序中
通过Struts2 FileUploadInterceptor.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>
网络应用程序中的客户端
HTML5
的{{1}}属性accept
(如this回答中所述)
<input type="file" />
随时注意我可能忘记的内容,我很乐意将其纳入此处。
答案 1 :(得分:3)
我认为您可以管理的最好方法是检查文件中的每个字节是否与您期望的字符集中的有效字符相对应。
例如,如果您认为这是一个UTF-8编码的文本文件,您可以尝试这样的方法来“验证”每个字节:
try {
Charset.availableCharsets().get("UTF-8").newDecoder()
.decode(ByteBuffer.wrap(bytesFromFile));
// was valid
} catch (CharacterCodingException e) {
// wasn't valid
}