4

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

怎么可能使用Java?

4

2 回答 2

13
  • 在独立的 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之类的第 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>
      

    有关FileUploadInterceptorFileUpload的更多文档

  • Web 应用程序中的客户端

    • withHTML5accept属性<input type="file" />(如答案中所述)

      <input type="file" accept="image/*,video/*">
      





我遗漏了所有基于文件扩展名的解决方案(通常不够可靠)以及一些替代的 3rd 方库和较旧的解决方案。

请随时注意我可能忘记的内容,我很乐意将其包含在此处。

于 2013-06-19T15:02:28.367 回答
4

我认为您可以管理的最好的方法是检查文件中的每个字节是否对应于您期望的字符集中的有效字符。

例如,如果您认为这是一个 UTF-8 编码的文本文件,您可以尝试这样的操作来“验证”每个字节:

try {  
  Charset.availableCharsets().get("UTF-8").newDecoder()
      .decode(ByteBuffer.wrap(bytesFromFile));  
  // was valid
} catch (CharacterCodingException e) {  
  // wasn't valid
}  
于 2013-06-19T13:54:12.593 回答