精华内容
下载资源
问答
  • Java实现获取文件类型的方法。
    2021-02-12 15:37:08

    展开全部

    主要以下几种方636f70793231313335323631343130323136353331333337623438法:

    这个MimetypesFileMap类会映射出一个file的Mime Type,这些Mime Type类型是在activation.jar包里面的资源文件中定义的import javax.activation.MimetypesFileTypeMap;

    import java.io.File;

    class GetMimeType {

    public static void main(String args[]) {

    File f = new File("test.gif");

    System.out.println("Mime Type of " + f.getName() + " is " +

    new MimetypesFileTypeMap().getContentType(f));

    // expected output :

    // "Mime Type of test.gif is image/gif"

    }

    }

    使用 java.net.URL

    警告:这个方法非常慢

    与上面所说的匹配后缀名类似。后缀名和mime-type的映射关系被定义在[jre_home]\lib\content-types.properties这个文件中import java.net.*;

    public class FileUtils{

    public static String getMimeType(String fileUrl)

    throws java.io.IOException, MalformedURLException

    {

    String type = null;

    URL u = new URL(fileUrl);

    URLConnection uc = null;

    uc = u.openConnection();

    type = uc.getContentType();

    return type;

    }

    public static void main(String args[]) throws Exception {

    System.out.println(FileUtils.getMimeType("file://c:/temp/test.TXT"));

    // output :  text/plain

    }

    }

    还有一种方式:就是取文件名最后一个“.”后的内容,通过人来判断如

    String fileName = "aaa.txt";

    String fileType =“txt”//通过方法取出方法类型为

    String type = "";

    if( fileTyep.equals("txt")){

    type  = "记事本";

    }else if(fileTyep.equals("img")){

    type  = "img图片";

    }。。。。。

    更多相关内容
  • java 获取文件的真实类型(不是根据文件的后缀名称判断类型) commons-io-2.6.jar commons-lang-2.6.jar
  • Java根据文件内容获取文件类型,防止文件伪造后缀名。
  • 主要介绍了Android中Java根据文件头获取文件类型的方法,涉及Android针对文件属性的相关操作技巧,需要的朋友可以参考下
  • Java获取文件类型的5种方法

    千次阅读 2021-02-28 19:23:05
    前言工作中经常会用到,判断一个文件的文件类型,这里总结一把,一般判断文件类型的原理有2种方式:1.根据文件扩展名判断优点:速度快,代码简单缺点:无法判断出真实的文件类型,例如一些伪造的文件或者没有后缀...

    069e505381919e83599b18ef23ab4058.jpg-wh_651x-s_648603462.jpg

    前言

    工作中经常会用到,判断一个文件的文件类型,这里总结一把,一般判断文件类型的原理有2种方式:

    1.根据文件扩展名判断

    优点:速度快,代码简单

    缺点:无法判断出真实的文件类型,例如一些伪造的文件或者没有后缀名称的文件

    2.根据文件流中前几个字符判断

    优点:可以判断出真实的文件类型

    缺点:速度慢,代码复杂

    下面我会针对每个方法,去测试验证,测试文件如下:

    1. 使用Files.probeContentType

    Java1.7开始,提供了用于解决MIME类型的方法 Files.probeContentType:

    publicstaticvoid test() throws IOException {

    Path path = new File("d:/test.png").toPath();

    String mimeType = Files.probeContentType(path);

    System.out.println(mimeType);

    }

    结果:

    cd0eb7760ac0a956d5125da92791fa1a.png-wh_600x-s_1093217018.png

    此方法利用已安装的FileTypeDetector实现来探查MIME类型。它调用每个实现的 probeContentType来解析类型。

    但是,其默认实现是特定于操作系统的,并且可能会失败,具体取决于我们使用的操作系统。

    结论:根据文件扩展名判断。

    2. 使用URLConnection

    URLConnection提供了几种用于检测文件的MIME类型的API。

    2.1 使用getContentType

    publicvoid test(){

    File file = new File("d:/test.png");

    URLConnection connection= file.toURL().openConnection();

    String mimeType = connection.getContentType();

    }

    结果:

    65962c6905288ec4b074f735f68c44e0.png-wh_600x-s_786952813.png

    结论:根据文件流中前几个字符判断。能够判断真实的文件类型,但是,这种方法的主要缺点是速度非常慢。

    2.2 使用guessContentTypeFromName

    publicvoid test(){

    File file = new File("d:/test.png");

    String mimeType = URLConnection.guessContentTypeFromName(file.getName());

    }

    结果:

    56c809b949d66a81b3d69b474cf2a19f.png-wh_600x-s_2838930864.png

    该方法利用内部的FileNameMap来判断MIME类型。

    结论:根据文件扩展名判断。

    2.3 使用guessContentTypeFromStream

    publicstaticvoid test() throws Exception {

    FileInputStream inputFile = new FileInputStream("d:/test.doc");

    String mimeType = URLConnection.guessContentTypeFromStream(new BufferedInputStream(inputFile));

    System.out.println(mimeType);

    }

    结果:

    2078d930080758fa1d5e4dcaf8aa3c40.png-wh_600x-s_2867127842.png

    结论:根据文件流中前几个字符判断。

    2.4 使用getFileNameMap

    使用URLConnection获得MIME类型的更快方法是使用getFileNameMap()方法:

    publicvoid test(){

    File file = new File("d:/test.png");

    FileNameMap fileNameMap = URLConnection.getFileNameMap();

    String mimeType = fileNameMap.getContentTypeFor(file.getName());

    }

    结果:

    7f3985d6784bb03bf79ef19d42db57f6.png-wh_600x-s_3818701968.png

    该方法返回URLConnection的所有实例使用的MIME类型表。然后,该表用于解析输入文件类型。

    当涉及URLConnection时,MIME类型的内置表非常有限。

    默认情况下,该类使用content-types.properties文件,其所在目录为JRE_HOME/lib。但是,我们可以通过使用content.types.user.table属性指定用户特定的表来扩展它 :

    System.setProperty("content.types.user.table","");

    结论:根据文件扩展名判断。

    3. 使用MimeTypesFileTypeMap

    该类是Java 6附带的,因此在使用JDK 1.6时非常方便。

    publicvoid test() {

    File file = new File("product.png");

    MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();

    String mimeType = fileTypeMap.getContentType(file.getName());

    }

    结果:

    e3cbc02a3046001a1215e133b3b1e83f.png-wh_600x-s_1293532887.png

    在这里,我们可以将文件名或File实例本身作为参数传递给函数。但是,以File实例为参数的函数在内部调用重载方法,该方法接受文件名作为参数。

    在内部,此方法查找名为mime.types的文件以进行类型解析。请务必注意,该方法以特定顺序搜索文件:

    但是,如果找不到文件,它将返回application/octet-stream作为响应。

    结论:根据文件扩展名判断。

    4. 使用jmimemagicjMimeMagic

    是一个受限制许可的库,我们可以使用它来获取文件的MIME类型。

    配置Maven依赖:

    net.sf.jmimemagic

    jmimemagic

    0.1.5

    接下来,我们将探讨如何使用该库:

    publicvoid test() {

    File file = new File("d:/test.doc");

    MagicMatch match = Magic.getMagicMatch(file, false);

    System.out.println(match.getMimeType());

    }

    该库可以处理数据流,因此不需要文件存在于文件系统中。

    结果:

    cfc6a3ea6180017925db660a3d6523ba.png-wh_600x-s_2964447332.png

    结论:根据文件流中前几个字符判断。

    5. 使用Apache TikaApache Tika

    是一个工具集,可检测并从各种文件中提取元数据和文本。它具有丰富而强大的API,并带有[tika-core],我们可以利用它来检测文件的MIME类型。

    配置Maven依赖:

    org.apache.tika

    tika-core

    1.18

    接下来,我们将使用detect()方法来解析类型:

    publicvoid whenUsingTika_thenSuccess() {

    File file = new File("d:/test.doc");

    Tika tika = new Tika();

    String mimeType = tika.detect(file);

    }

    结果:

    b5757d9f6f2998d3d66e8357d22b0e3c.png-wh_600x-s_325866396.png

    结论:根据文件流中前几个字符判断。

    总结

    根据判断原理总结分类如下:

    67fc7d5f380d6ab2d6ae94693c146867.png-wh_600x-s_902407659.png

    具体如何选择,依据需求而定

    参考:https://www.baeldung.com/java-file-mime-type

    6d7fd34adc7041c19d84e8f6e79d15cb.png

    【编辑推荐】

    展开全文
  • 思路:路径创建出File文件类型的对象,然后通过MultipartFile对象的MockMultipartFile方法将生成的File文件转化为MultipartFile文件,上代码; controller层: package com.java.product.module.controller; ...

    java 通过文件路径获得MulipartFile类型文件 - File转MulipartFile

    思路:路径创建出File文件类型的对象,然后通过MultipartFile对象的MockMultipartFile方法将生成的File文件转化为MultipartFile文件,上代码;

    方式一:使用MockMultipartFile函数

    controller层:

    package com.java.product.module.controller;
    
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.springframework.mock.web.MockMultipartFile;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    
    @Api(value = "uploadFile", tags = "上传文件")
    @RequestMapping("/uploadFile")
    @RestController
    public class uploadFileController {
        @ApiOperation(value = "上传2", notes = "filePath:文件路径")
        @GetMapping("/getMulipartFile2")
        public MultipartFile getMulipartFiles2(String filePath) throws IOException {
            File file = new File(filePath);
            FileInputStream fileInputStream = new FileInputStream(file);
            MultipartFile multipartFile = new MockMultipartFile(file.getName(), file.getName(),
                    "application/sql", fileInputStream);
            long size = multipartFile.getSize();
            return multipartFile;
        }
    }
    

    依赖的包:

    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpcore</artifactId>
        <version>4.0.1</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.1.7.RELEASE</version>
    </dependency>
    

    下面直接使用swagger来进行测试,没有配置swagger的同学使用postMan也可以;

    在这里插入图片描述

    看来是没错了~对象不为空,且和上传文件的属性中的文件字节大小一样;
    在这里插入图片描述
    然后F9放开断点~发现…
    在这里插入图片描述
    报错了!?!?!
    对,就是报错了,Type definition error - 类型定义错误,因为前端虽然能上传MultipartFile类型的文件,但是却无法解析,所以,不要把MultipartFile文件对象直接从后台给前端哦~


    方式二:数据流实现

    直接看代码吧

    Controller层

    package com.java.product.module.controller;
    
    
    import io.swagger.annotations.Api;
    import io.swagger.annotations.ApiOperation;
    import org.apache.commons.fileupload.FileItem;
    import org.apache.commons.fileupload.FileItemFactory;
    import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.multipart.MultipartFile;
    import org.springframework.web.multipart.commons.CommonsMultipartFile;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    
    @Api(value = "uploadFile", tags = "上传文件")
    @RequestMapping("/uploadFile")
    @RestController
    public class uploadFileController {
    
        @ApiOperation(value = "上传1", notes = "filePath:文件路径")
        @GetMapping("/getMulipartFile1")
        public MultipartFile getMulipartFile1(String filePath) {
            File f = new File(filePath);
            String fieldName = f.getName();
            FileItemFactory factory = new DiskFileItemFactory(16, null);
            FileItem item = factory.createItem("file", "application/sql", false, fieldName);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            try {
                FileInputStream fis = new FileInputStream(f);
                OutputStream os = item.getOutputStream();
                while ((bytesRead = fis.read(buffer, 0, 8192)) != -1) {
                    os.write(buffer, 0, bytesRead);
                }
                os.close();
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
            MultipartFile mfile = new CommonsMultipartFile(item);
            long size = mfile.getSize();
            return mfile;
        }
    }
    
    

    POM文件依赖:

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.2</version>
    </dependency>
    

    然后运行看转化后的文件大小,如下图,依然成功了~
    在这里插入图片描述

    展开全文
  • Java(65):java File类,使用File类来获取目录或文件 一个目录其实就是一个 File 对象,它包含其他文件和文件夹。 如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。 可以通过...

    Java(65):java File类,使用File类来获取目录或文件

    一个目录其实就是一个 File 对象,它包含其他文件和文件夹。

    如果创建一个 File 对象并且它是一个目录,那么调用 isDirectory() 方法会返回 true。

    可以通过调用该对象上的 list() 方法,来提取它包含的文件和文件夹的列表。

    isDirectory()//判断当前File对象是否目录

    isFile()//判断当前File对象是否一个文件

    getAbsolutePath()//返回当前目录或文件的绝对路径

    list()//返回一个String数组,为当前目录下的子目录和文件,不包括子目录下的文件或目录

    listFiles()//返回一个File数组,为当前目录下的子目录和文件,不包括子目录下的文件或目录

    下面展示的例子说明如何使用 list() 方法来检查一个文件夹中包含的内容:

    19.1查找当前目录包括子目录的所有文件

      //查找当前目录包括子目录的所有文件并打印出来
        public static void searchFile(File file) throws Exception{
            if (file.isDirectory()) {       //判断是否是个目录
                File[] tmps = file.listFiles();      //查到文件或文件夹,放到列表里
                if (tmps !=null) {
                    for (File tmp : tmps) {
                        searchFile(tmp);     //循环调用该方法
                    }
                }
            }
            else { //不是目录,是文件时打印
                System.out.println(file.getAbsolutePath());
            }

    执行结果:

    其他:查找当前目录包括子目录中符合条件.jar的的文件

        //查找当前目录包括子目录的符合条件的文件
        public static void searchFile(File file) throws Exception{
            if (file.isDirectory()) {
                File[] tmps = file.listFiles();
                if (tmps !=null) {
                    for (File tmp : tmps) {
                        searchFile(tmp);
                    }
                }
            }
            else {
                if (file.getAbsolutePath().endsWith(".jar"))
                {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }

    19.2查找当前目录(不包括子目录)的所有文件和目录

     //查找当前目录的符合条件的文件
        public static void searchFile(String filepath){
            File file=new File(filepath);
            if(file.isDirectory()){
                String[] names = file.list(); // 获得当前目录下的所有文件的文件名
                for (String name : names) {
                    System.out.println(name);
                }
            }
        }

    其他:查找当前目录的符合条件的文件和文件夹

        //查找当前目录的符合条件的文件和文件夹
        public static void searchFile(String filepath){
            File file=new File(filepath);
            if(file.isDirectory()){
                String[] names = file.list(); // 获得当前目录下的所有文件的文件名
                for (String name : names) {
                    //System.out.println(name);
                    if (name.contains(".jar") ){
                        System.out.println(name);
                    }
                }
            }
        }

    展开全文
  • -----------------------------------------------------------------------------------------File类(文件/目录)。-------------------------------------------------------------------------...
  • java File获取字节流

    千次阅读 2021-02-12 15:29:24
    /*文件64位编码*/public static void main(String[] args) {byte[] fileByte = toByteArray(newFile);String imgStr = new BASE64Encoder().encode(fileByte);}/*读取文件的字节数组*/public static byte[] ...
  • Java实现获取文件大小的几种方法

    千次阅读 2021-03-06 02:08:20
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼目前Java获取文件大小的方法有两种:1、通过file的length()方法获取;2、通过流式方法获取通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()...
  • public classReadFromFile {/*** 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。*/public static voidreadFileByBytes(String fileName) {File file= newFile(fileName);InputStream in= ...
  • java通过file读取txt文件内容

    千次阅读 2019-11-06 14:29:59
    String path="G:/test.txt"; File file = new File(path); // 要读取以上路径的input。txt文件 System.out.println(file.getName()); byte[] bytes = new byte[1024]; StringBuffer s...
  • java 获取文件的真实类型(不是根据文件的后缀名称判断类型) import org.apache.commons.io.FileUtils; import org.apache.commons.io.FilenameUtils; import org.apache.commons.lang.StringUtils; import java.io...
  • 使用Java获取文件类型

    千次阅读 2016-09-17 22:40:51
    Using Java 7 Files.html#probeContentType import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; public class Test { public static void
  • java web中File的相对路径与绝对路径总结,用于在运行时获取配置文件、动态加载对象等
  • java编写的ftpclient,用于向ftp服务器发送、获取文件。本人亲自测试过,操作系统采用centos6.5 64位,
  • java获取文件大小的方法

    千次阅读 2021-03-08 18:08:16
    java获取文件大小的方法目前Java获取文件大小的方法有两种:1、通过file的length()方法获取;2、通过流式方法获取通过流式方法又有两种,分别是旧的java.io.*中FileInputStream的available()方法和新的java.nio.*...
  • java获取文件创建时间

    2012-05-11 16:25:35
    java代码 获取文件创建时间,有一点小问题就是,当文件名有空格时,将会出错、有心人可解决、
  • File类——JAVA实现批量修改文件名称

    千次阅读 2021-02-27 20:13:18
    最近做了一道题目如下批量修改文件名称假设你某天跟朋友出去玩,使用某数码相机拍摄了一些照片但是当你回来的时候你发现所有的照片都是如下命名的P1020335.JPGP1020336.JPGP1020337.JPGP1020338.JPGP1020339.JPG......
  • 获取File文件类型

    千次阅读 2017-11-30 19:49:18
    --java中利用tika判断文件类型 [url]http://blog.sina.com.cn/s/blog_958a07d001014184.html[/url] --va获取文件类型Mime Type的各种方法 [url]http://dada89007.iteye.com/blog/1392606[/url] --TIKA内容提取 ...
  • 文章目录前言1. 使用Files.probeContentType2. 使用URLConnection2.1 使用getContentType2.2 使用guessContentTypeFromName2.3 ...工作中经常会用到,判断一个文件的文件类型,这里总结一把,一般判断文件类型的原理有2
  • Java获取文件类型(扩展名)

    万次阅读 2014-10-09 20:09:09
    File file=new File("E:\\aa.jpg"); String fileName=file.getName(); String fileTyle=fileName.substring(fileName.lastIndexOf("."),fileName.length()); System.out.println(fileTyle); 程序运行效果图:
  • Java文件类以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。 有以下四种方法构建一个File对象: File(File parent,String child):以父抽象路径名和子路径名字符串...
  • java file对象获取文件大小

    万次阅读 多人点赞 2014-02-11 10:49:42
    import java.io.File; import java.text.DecimalFormat; import java.io.FileInputStream; public class GetFileSize {  public longgetFileSizes(File f) throws Exception{//取得文件大小  long s=0;  
  • 方法一: split分割:如果用“.”作为分隔的话,必须是如下写法,String.split(&quot;\.&...file.txt&quot;;// 文件名 String[] strArray = filename.split(&quot;\\.&quot;); i
  • java获取文件大小_Java获取文件大小

    千次阅读 2020-07-19 18:24:52
    java获取文件大小Today we will look into different ways to get file size in Java. 今天,我们将研究使用Java获取文件大小的不同方法。 Java获取文件大小 (Java get file size) There are different classes ...
  • 在进入主题之前,首先需要简单介绍一下MultipartFile这个类,通过getOriginalFilename()获取文件的名字,但是这个名字只是上传文件的名字,通过这个名字是无法访问到这个文件的。以下是测试时的debug信息: 可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 678,986
精华内容 271,594
关键字:

java通过file获取文件类型

java 订阅