使用Java检查给定文件是简单文本文件

时间:2013-06-19 13:39:35

标签: java

我需要将大文本文件导入数据库。 该文本文件的结构是预定义的,使用几个分隔符和所有。 我只需要检查给定文件是否是文本文件(无论扩展名如何)。

如何使用Java?

2 个答案:

答案 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应用程序中

    • 使用JMimeMagicApache 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>
      

    有关FileUploadInterceptorFileUpload

  • 的更多文档
  • 网络应用程序中的客户端

    • 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
}