精华内容
下载资源
问答
  • flie
    万次阅读 多人点赞
    2019-01-05 17:29:27

    前言

    前段时间碰到了中转文件的需求,需要使用HttpClient中转一下文件,过程为:
    描述信息
    在实现这个需求的过程中就用得到了MultipartFile与File,而且我对前一个也不是很熟悉。记录一下

    什么是MultipartFile

    MultipartFile是spring类型,代表HTML中form data方式上传的文件,包含二进制数据+文件名称。【来自百度知道】

    MultipartFile 与 File 的 互相转换

    1. File转MultipartFile

    (1):使用org.springframework.mock.web.MockMultipartFile 需要导入spring-test.jar

    public static void main(String[] args) throws Exception {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileInputStream fileInputStream = new FileInputStream(file);
            // MockMultipartFile(String name, @Nullable String originalFilename, @Nullable String contentType, InputStream contentStream)
            // 其中originalFilename,String contentType 旧名字,类型  可为空
            // ContentType.APPLICATION_OCTET_STREAM.toString() 需要使用HttpClient的包
            MultipartFile multipartFile = new MockMultipartFile("copy"+file.getName(),file.getName(),ContentType.APPLICATION_OCTET_STREAM.toString(),fileInputStream);
            System.out.println(multipartFile.getName()); // 输出copytest.txt
        }
    
    

    (2):使用CommonsMultipartFile

    public static void main(String[] args) throws Exception {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            // 需要导入commons-fileupload的包
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
               while ( (n = inputStream.read(buffer,0,4096)) != -1){
                   os.write(buffer,0,n);
               }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
            }catch (IOException e){
                e.printStackTrace();
            }
    
        }
    
    2. MultipartFile转File

    (1):使用File转MultipartFile的逆过程
    你在看这个代码的时候会觉得很熟悉,是的这个就是File转MultipartFile的逆转过程,这个方法会在根目录生成一个文件,需要删除该文件。

     public static void main(String[] args) throws Exception {
            int n;
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            File f = null;
            // 输出文件的新name 就是指上传后的文件名称
            System.out.println("getName:"+multipartFile.getName());
            // 输出源文件名称 就是指上传前的文件名称
            System.out.println("Oriname:"+multipartFile.getOriginalFilename());
            // 创建文件
            f = new File(multipartFile.getOriginalFilename());
            try ( InputStream in  = multipartFile.getInputStream(); OutputStream os = new FileOutputStream(f)){
                // 得到文件流。以文件流的方式输出到新文件
                // 可以使用byte[] ss = multipartFile.getBytes();代替while
                byte[] buffer = new byte[4096];
                while ((n = in.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                // 读取文件第一行
                BufferedReader bufferedReader = new BufferedReader(new FileReader(f));
                System.out.println(bufferedReader.readLine());
                // 输出路径
                bufferedReader.close();
            }catch (IOException e){
                e.printStackTrace();
            }
            // 输出file的URL
            System.out.println(f.toURI().toURL().toString());
            // 输出文件的绝对路径
            System.out.println(f.getAbsolutePath());
            // 操作完上的文件 需要删除在根目录下生成的文件
            File file = new File(f.toURI());
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
    
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    (2):使用transferTo (本质上还是使用了流 只不过是封装了步骤)
    会生成文件,最后不需要文件要删除

    public static void main(String[] args) throws Exception {
            String path = "F:\\demo\\";
            File file = new File(path,"demo.txt");
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            /*byte[] ss = multipartFile.getBytes();
            OutputStream os = new FileOutputStream(file);
            os.write(ss);
            os.close();*/
            multipartFile.transferTo(file);
            // 读取文件第一行
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            System.out.println(bufferedReader.readLine());
            // 输出绝对路径
            System.out.println(file.getAbsolutePath());
            bufferedReader.close();
            // 操作完上的文件 需要删除在根目录下生成的文件
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    (3):使用FileUtils.copyInputStreamToFile()
    也是会生成文件,到最后也是要删除文件

    public static void main(String[] args) throws Exception {
            String path = "F:\\demo\\";
            File file = new File(path,"demo.txt");
            // 得到MultipartFile文件
            MultipartFile multipartFile = getFile();
            // 把流输出到文件
            FileUtils.copyInputStreamToFile(multipartFile.getInputStream(),file);
            // 读取文件第一行
            BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
            System.out.println(bufferedReader.readLine());
            // 输出绝对路径
            System.out.println(file.getAbsolutePath());
            bufferedReader.close();
            // 操作完上的文件 需要删除在根目录下生成的文件
            if (file.delete()){
                System.out.println("删除成功");
            }else {
                System.out.println("删除失败");
    
            }
        }
        /**
         *
         * @Description 返回MultipartFile文件
         * @return org.springframework.web.multipart.MultipartFile
         * @date 2019/1/5 11:08
         * @auther dell
         */
        public static MultipartFile getFile() throws IOException {
            String filePath = "F:\\test.txt";
            File file = new File(filePath);
            FileItem fileItem = new DiskFileItem("copyfile.txt", Files.probeContentType(file.toPath()),false,file.getName(),(int)file.length(),file.getParentFile());
            byte[] buffer = new byte[4096];
            int n;
            try (InputStream inputStream = new FileInputStream(file); OutputStream os = fileItem.getOutputStream()){
                while ( (n = inputStream.read(buffer,0,4096)) != -1){
                    os.write(buffer,0,n);
                }
                //也可以用IOUtils.copy(inputStream,os);
                MultipartFile multipartFile = new CommonsMultipartFile(fileItem);
                System.out.println(multipartFile.getName());
                return multipartFile;
            }catch (IOException e){
                e.printStackTrace();
            }
            return null;
        }
    

    4:强转类型

    CommonsMultipartFile commonsmultipartfile = (CommonsMultipartFile) multipartFile;
    DiskFileItem diskFileItem = (DiskFileItem) commonsmultipartfile.getFileItem();
    File file = diskFileItem.getStoreLocation();
    

    这种强转你获得的file只是一个空壳
    在这里插入图片描述
    你能获取的也只有这个F:\upload_edfce39f_2894_4b66_b865_d5fb8636bdf3_00000000.tmp 网上有说会在根目录生成临时文件的,从tmp也可以看出来是个临时文件,但是我试了好几次啥都没找到。。。。直接获取这个file读取内容也是会报文件找不到的 这是必然的 当然也有在spring配置文件配置CommonsMultipartResolver的 这就感觉很麻烦了。。。。
    但是我们可以看一下diskFileItem 看下图 是不是很熟悉了,从diskFileItem可以获取文件流,其实你看了源码你就知道获取文件流都是从这里获取的。剩下的就好办了 我就不赘述了/。在这里插入图片描述

    在使用临时文件的时候可以使用缓冲区创建临时文件

    //  createTempFile(String prefix, String suffix) 
    //  prefix 文件名 suffix 文件格式
    // 默认是tmp格式  C:\Users\dell\AppData\Local\Temp\tmp8784723057512789016.tmp 
    File file =File.createTempFile("tmp", null);
    // txt格式  C:\Users\dell\AppData\Local\Temp\tmp2888293586594052933.txt
    File file =File.createTempFile("tmp", ".txt");
    

    HttpClient构建上传文件参数并实现中转文件

    这里不自己给例子了,参考了其他博客的代码

    // 获取文件名称
    String fileName = file.getOriginalFilename();
    HttpPost httpPost = new HttpPost(url);
    // 创建文件上传实体
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.addBinaryBody("file", file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);
    builder.addTextBody("filename", fileName);
    HttpEntity entity = builder.build();
    httpPost.setEntity(entity);
    HttpResponse response = httpClient.execute(httpPost);// 执行提交
    

    执行提交之后你会发现你上传的文件名会出现中文乱码
    这里参考
    HttpClient上传文件中文名乱码
    该博客详细说明了为什么会乱码以及怎么解决
    我使用的解决办法是:

     //设置模式为RFC6532
     builder.setMode(HttpMultipartMode.RFC6532);
    
    更多相关内容
  • Android File Transfer for MAC 下载

    热门讨论 2017-02-23 17:02:03
    Android File Transfer.zip,Android File Transfer.dmg
  • js获取 input file 图片立即显示

    热门讨论 2014-12-05 10:20:12
    js获取input file控件选择的图片 并且立即在img标签显示出来
  • //要么是全路径 File file = new File("D:\\java\\content\\eclipse-win64\\S\\java\\fd.properties"); //要么是去在全路径基础上去掉项目名 File file2 = new File("java\\fd.properties"); File file3 = new File...

    项目的结构:相同颜色是同级的

    88a62acb62d2081050da2ee7afb09149.png

    0af8df829a30df675d1c60ba6f78170a.png

    7bcc5e37a2b980f26e0ac9c664e34af2.png

    bean的配置文件的读取和一般文件的读取有点差别的

    07e771f0646271db6040884bae3fd6be.png

    public static void getValue(String key){ //传入"time"

    Properties prop = new Properties();

    Properties prop2 = new Properties();

    Properties prop3 = new Properties();

    //要么是全路径

    File file = new File("D:\\java\\content\\eclipse-win64\\S\\java\\fd.properties");

    //要么是去在全路径基础上去掉项目名

    File file2 = new File("java\\fd.properties");

    File file3 = new File("fd2.properties");

    try {

    //装载配置文件

    prop.load(new FileInputStream(file));

    prop2.load(new FileInputStream(file2));

    prop3.load(new FileInputStream(file3));

    } catch (IOException e) {

    e.printStackTrace();

    }

    //返回获取的值

    System.out.println(prop.getProperty(key)

    + prop2.getProperty(key)+prop3.getProperty(key));

    }8 8 9

    fd.properties的内容

    4d3a2cb5b2f6a0f8083a5a2005091f09.png

    2a7dd0568220559f84436cfa37e58ab3.png

    项目名是 S

    419a5ffc3ecbdade86155eabbf75a9a2.png  

    fff7f2a1ff9ddc320743171e650f642a.png

    点开bin文件夹

    638d68f2c841fafeae6793f80bc78fdf.png

    注意这个fd.properties文件

    发现:

    只有在src或者java文件夹下的java文件或资源文件才会编译,然后通过打包,会复制到commlib中

    后面有2个ok

    /*

    1.绝对路径

    a.带盘符,如E:/book.xml

    b.以http开头,http://img.baidu.com/img/book.jpg

    2.相对路径

    a.带"/"开头,如/book.xml

    b.不带"/"开头,如book.xml

    现在项目结构如下,在ParseXML类中操作,我实验项目System.getProperty("user.dir")=E:\ProjectTest\javaEE\

    绝对路径:

    new

    File("E:/ProjectTest/javaEE/src/com/ly/javaee/xml/dom4j/book.xml")---OK

    相对路径

    new

    File("book.xml")----报错(此时相当于System.getProperty("user.dir")+"book.xml",这是文件book.xml不存在user.dir下面)

    new File("src/com/ly/javaee/xml/dom4j/book.xml")----OK(不带"/"

    可见在项目中相对的是以项目名为根路径,此时相当于System.getProperty("user.dir")+"src/com/ly/javaee/xml/dom4j/book.xml")

    new File("/book.xml")----以下可以看出本JVM运行在E盘下,此时带"/"就相当于"E:/book.xml",JVM运行在哪个盘符就以哪个为根路径

    new

    File("./book.xml");---报错(同new File("book.xml")效果)

    随机推荐

    Excel筛选之后如何下拉递增

    1.痛点 Excel表格,通过筛选了之后,再想统计行数,通过单纯的拖动或者填充排序啥的,都无法做到排序或行数递增: 2.解决方案 发现了个excel的公式可以完美解决该问题,赞个,找的好辛苦. 3.大 ...

    ubuntu下安装JDK并搭建activeMQ

    1.安装JDK,网上有人说activeMQ支持持JDK1.7及以上版本,未实际测试,保险起见我这里直接安装JDK1.7. #apt-get install openjdk--jdk 2.设置环境变量 ...

    细说new与malloc的10点区别

    前言 几个星期前去面试C++研发的实习岗位,面试官问了个问题: new与malloc有什么区别? 这是个老生常谈的问题.当时我回答new从自由存储区上分配内存,malloc从堆上分配内存:new/de ...

    RESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))

    无法将类型为"Microsoft.Office.Interop.Excel.ApplicationClass"的 COM 对象强制转换为接口类型"Microsoft.Of ...

    LLVM

    http://blog.csdn.net/snsn1984/article/details/41077763

    svn Error: post-commit hook failed (exit code 127) with output

    Command: Commit Modified: C:\Users\xsdff\Desktop\project\index.html Sending content: C:\Users\xsdff\ ...

    phonegap archive 报错 Cordova/CDVViewController.h' file not found

    在BuildSettings->Header Search Paths  增加如下路径,问题解决 $(OBJROOT)/UninstalledProducts/include "$(O ...

    由链表初始化看C语言的二级指针

    先来看C语言创建链表.插入节点和遍历链表的一段代码: #include #include typedef int ElemType; ...

    java对象引用传递和值传递的一些总结

    1.对象作为函数的参数传递过去的时候,是以原对象的引用的方式传递的,更改参数对象的值,会影响原来的对象. 2.对象作为函数的返回值的时候,传递过来的也是一个引用传递,更改传递过来的对象的时候,会影响原 ...

    C++利用不完全实例化来获得函数模板参数的返回值和参数

    有一些模板会以函数为模板参数,有时候这些模板要获得函数的返回值和参数.如在boost中的signal和slot机制,就存在这样情况. 那么,我们如何得到这些信息呢? 我们使用C++不完全实例化来实现. ...

    展开全文
  • JAVA基础知识之File

    万次阅读 多人点赞 2018-07-13 10:46:30
    一、File类定义 1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类 2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较public class File ...

    一、File类定义

                1. File类主要是JAVA为文件这块的操作(如删除、新增等)而设计的相关类

                2. File类的包名是java.io,其实现了Serializable, Comparable两大接口以便于其对象可序列化和比较

    public class File implements Serializable,Comparable<File>
    {
    }

    二、File类实例域

    1) path :封装的String类型变量,代表了文件的路径

     private String path;
     public String getPath() 
    {
            return path;
    }
    

    2) separatorChar:静态常量,代表了运行该程序的系统的路径分隔符,windows系统为"\" ,linux系统为“/”

     public static void main(String[] args)
    {
        
        System.out.println(File.separator); //在windows系统下运行结果为\
        
    }

    3)  separator :静态常量,是由separatorChar扩展而来的字符串型常量,运行结果和separatorChar一样

    public static final String separator = "" + separatorChar;

    4)pathSeparatorChar :静态常量,代表用于分割多个路径的系统分隔符。 在UNIX系统上,此字符为':'而 Windows系统上它是';'

     public static void main(String[] args)
    {
        
        System.out.println(File.pathSeparator); //运行结果为;
    }

    5)pathSeparator: 静态常量,由pathSeparatorChar扩展而来的字符串,运行结果和pathSeparatorChar一样

     public static final String pathSeparator = "" + pathSeparatorChar;

    三、File类构造函数

    注意:构造函数只是创建一个File实例,并没有以文件做读取等操作,因此路径即使是错误的,也可以创建实例不报错

    1)通过给定的字符串路径(一般是文件的绝对路径)转为抽象路径名用来创建File实例,当传入null时会抛出NullPointerException空异常错误

        public File(String pathname) {}
    public class Test2
    {
    
     public static void main(String[] args)
    {
         File file=new File("xxx");
    
        System.out.println(file.getPath());  //路径结果就是xxx
    }
    }

    2)从父路径名字符串和子路径名字符串(一般是相对父类的相对路径)创建新的File实例

    public File(String parent, String child) {}

         2.1) 若子路径child为Null,会抛出NullPointerException空异常错误

         2.2) 当父路径为Null时,会以子路径child作为绝对路径创建实例,等同于调用第一个File(String child )效果一样

    public class Test2
    {
    
     public static void main(String[] args)
    {
         String parent=null;
         
         File file=new File(parent,"xxx");
    
        System.out.println(file.getPath());  //路径结果就是xxx
    }
    }

        2.3) 当父路径不为空时,会以父路径作为目录,子路径作为父路径下的目录或者文件名,最后得到的实例对象的路径就是父路径和子路径的组合

    public class Test2
    {
    
        public static void main(String[] args)
        {
            String parent = "E:/test";
            
            File parentFile= new File(parent);
    
            String child = "E:/test/1.txt";
    
            File file = new File(parentFile, child);
    
            System.out.println(file.getPath()); // 路径结果就是E:\test\E:\test\1.txt
        }
    }

    3)通过父路径File实例对象和子路径字符串创建新的File实例,等同于上面的方法中把父路径字符串创建File实例然后传入一样

    public class Test2
    {
    
        public static void main(String[] args)
        {
            String parent = "E:/test";
            
            File parentFile= new File(parent);
    
            String child = "E:/test/1.txt";
    
            File file = new File(parentFile, child);
    
            System.out.println(file.getPath()); // 路径结果就是E:\test\E:\test\1.txt
        }
    }

    4)通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例,这个方法暂时没有看懂,需要查阅资料加深理解

    public File(URI uri) {}

    四、File类中的各种常用方法

           下面是我E盘下test文件夹的文件情况,以此作为案例


    1)获取实例对象代表的文件名字(包含文件后缀)

    public String getName()}
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.getName()); // 结果是1.txt
    
            System.out.println(file2.getName()); // 结果是异常1.jpg
    
            System.out.println(file3.getName()); // 结果是xxx
    
        }
    }

    2)获取实例对象代表的文件上级目录

    public String getParent()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.getParent()); // 结果是E:\test
    
            System.out.println(file2.getParent()); // 结果是E:\test
    
            System.out.println(file3.getParent()); // 结果是null
    
        }
    }
    

    3)获取实例对象的父项的实例对象,如果此路径名未指定父目录,则返回null;也就是获取对象的上级目录然后再实例化一个对象

    public File getParentFile()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.getParentFile()); // 结果是E:\test
    
            System.out.println(file2.getParentFile()); // 结果是E:\test
    
            System.out.println(file3.getParentFile()); // 结果是null
    
        }
    }

    4)获取实例对象代表的文件的实际路径

    public String getPath()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.getPath()); // 结果是E:\test\1.txt
    
            System.out.println(file2.getPath()); // 结果是E:\test\异常1.jpg
    
            System.out.println(file3.getPath()); // 结果是xxx
    
        }
    }
    

    5)检测该实例对象代表的文件的路径是否是绝对路径(windows系统中路径是以驱动盘开始的就是绝对路径)

    public boolean isAbsolute()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.isAbsolute()); // 结果是true
    
            System.out.println(file2.isAbsolute()); // 结果是true
    
            System.out.println(file3.isAbsolute()); // 结果是false
    
        }
    }
    

    6)获取实例对象代表的文件的绝对路径

    public String getAbsolutePath()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.getAbsolutePath()); // 结果是E:\test\1.txt
    
            System.out.println(file2.getAbsolutePath()); // 结果是E:\test\异常1.jpg
    
            System.out.println(file3.getAbsolutePath()); // 结果是D:\workspace\lettcode\xxx(编译器的工作空间作为解析目录了)
    
        }
    }

    7)实例对象代表的文件是否存在

    public boolean exists()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.exists()); // 结果是true
    
            System.out.println(file2.exists()); // 结果是true
    
            System.out.println(file3.exists()); // 结果是false
    
        }
    }

    8)检测实例对象代表的是否是文件

    public boolean isFile()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.isFile()); // 结果是true
    
            System.out.println(file2.isFile()); // 结果是true
    
            System.out.println(file3.isFile()); // 结果是false
    
        }
    }

    9)检测实例对象代表的是否是目录

    public boolean isDirectory()
    public class Test2
    {
    
        public static void main(String[] args) throws URISyntaxException
        {
    
            File file = new File("E:/test/1.txt");
    
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.isDirectory()); // 结果是false
    
            System.out.println(file2.isDirectory()); // 结果是false
    
            System.out.println(file3.isDirectory()); // 结果是false
    
        }
    }

    10)创建新文件--当且仅当实例对象代表的文件不存在时才可以创建新文件

    public boolean createNewFile()  throws IOException
    public class Test2
    {
    
        public static void main(String[] args) throws  IOException
        {
    
            File file = new File("E:/test/1.txt");
            
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.createNewFile()); // 结果是false,已经存在无法创建
    
            System.out.println(file2.createNewFile()); // 结果是false,已经存在无法创建
    
            System.out.println(file3.createNewFile()); // 结果是true,不存在可以创建
    
        }
    }
    

    创建的XXX文件的目录地址是以编译器的工作空间为上级目录加上创建实例对象的时候的路径名形成最后的路径



     11)删除实例对象代表的文件或目录,当代表目录时,必须目录下为空才可以删除

    public boolean delete()
    public class Test2
    {
    
        public static void main(String[] args) throws  IOException
        {
    
            File file = new File("E:/test/");
            
            File file2 = new File("E:/test/异常1.jpg");
    
            File file3 = new File("xxx"); // 错误路径
    
            System.out.println(file.delete()); // 结果是false,目录无法删除
    
            System.out.println(file2.delete()); // 结果是true,文件可以删除
    
            System.out.println(file3.delete()); // 结果是true,文件可以删除
    
        }
    }
    

    执行方法后的test文件如下:



    12)根据实例对象的路径名创建目录(若目录已存在,则false;若路径是文件,则fasle;若路径的上级目录不存在则false)

    public boolean mkdir()
    public class Test2
    {
    
        public static void main(String[] args) throws IOException
        {
    
            File file = new File("E:/test1/");
    
            File file2 = new File("E:/test2/异常1.jpg");
    
            File file3 = new File("E:/ceshi");
    
            File file4 = new File("E:/ceshi2/2018");
    
            System.out.println(file.mkdir()); // false 因为test1目录已存在
    
            System.out.println(file2.mkdir()); // false,因为上级目录test2不存在
    
            System.out.println(file3.mkdir()); // true,因为ceshi目录不存在且是上级目录是E盘存在的
    
            System.out.println(file4.mkdir()); // false,因为ceshi2目录不存在,所以不成功
    
        }
    }


    13)根据实例对象的路径创建目录,包括创建那些必须的且不存在的父级目录

    public boolean mkdirs()
    public class Test2
    {
    
        public static void main(String[] args) throws IOException
        {
    
            File file = new File("E:/test1/");
    
            File file2 = new File("E:/test2/异常1.jpg");
    
            File file3 = new File("E:/ceshi");
    
            File file4 = new File("E:/ceshi2/zhagnsan");
    
            System.out.println(file.mkdirs()); // false 因为test1目录已存在
    
            System.out.println(file2.mkdirs()); // true,因为目录不存在所以可以创建,但注意生成的异常1.jpg是文件夹不是图片
    
            System.out.println(file3.mkdirs()); // true,因为目录不存在所以可以创建
    
            System.out.println(file4.mkdirs()); // true,因为目录不存在所以可以创建
    
        }
    }
    

    14) 获取实例对象代表的文件下的各级文件名和目录名,返回一个字符串数组      

    public String[] list()

            1.  当实例对象代表的是文件不是目录时,返回NUll对象

            2.  获取的是该目录下的文件名和目录名,并不包含该目录名称和其上级目录名称

            3.  字符串数组中都是文件名或目录名并不是路径名

            4.  字符串中的元素并不是按照实际系统中目录下的顺序排列的

    例如E盘test文件夹里面是这样的



    调用list方法

    public class Test2
    {
    
        public static void main(String[] args) throws IOException
        {
    
            File file2 = new File("E:/test");
    
            String[] list = file2.list();
    
            for (int i = 0; i < list.length; i++)
            {
                System.out.println(list[i]); // 结果为1.txt、xxx、工资表.xls、异常1.jpg、第一个目录、第三个目录
            }
    
        }
    }

    15)获取实例对象代表的文件下的各级文件名和目录名并指定过滤器进行过滤,返回一个字符串数组     

    public String[] list(FilenameFilter filter)

        1. 过滤器是FilenameFilter类对象,当传入null时,效果和list()方法一样

        2. 过滤器是指过滤掉不符合名称的名字

        3. FilenameFilter 是一个接口,因此需要自己新建一个类来实现该接口作为参数传入进去

        4.仔细研究方法的源码可以发现,所谓过滤就是要重写FilenameFilter的accept方法并在方法中过滤

    public String[] list(FilenameFilter filter) {
            String names[] = list();
            if ((names == null) || (filter == null)) {
                return names;
            }
            List<String> v = new ArrayList<>();
            for (int i = 0 ; i < names.length ; i++) {
                if (filter.accept(this, names[i])) {  //必须重写accept方法,并在方法内对传入的name进行判定是否合乎过滤条件
                    v.add(names[i]);
                }
            }
            return v.toArray(new String[v.size()]);
        }
    

          5. 例如我们只要后缀名是txt的文件名称,那么可以按照以下逻辑来处理

    创建FilenameFilter的实现类TxtFilter并重写accept方法,在方法中进行判定

    public class TxtFilter implements FilenameFilter
    {
    
        @Override
        public boolean accept(File dir, String name)
        {
            if(name.endsWith(".txt"))
            {
                return true;
            }
            return false;
        }
    
    }

    但是仔细思考,如果我还需要过滤.java结束的呢?难道又去重新创建实现类?因此可以用过滤条件作为构造参数传入构造方法中初始化其变量,这样就是可变的

    public class TxtFilter implements FilenameFilter
    {
    
        private String FilterName; // 作为过滤器名称变量
    
        public TxtFilter(String FilterName)
        {
    
            this.FilterName = FilterName; // 初始化构造过滤器名称,这样就不用每次都创建新类
    
        }
    
        public String getFilterName()
        {
    
            return FilterName; // 公有的域访问器方法,提供接口获取
        }
    
        @Override
        public boolean accept(File dir, String name)
        {
    
            String fileterNameString = this.getFilterName(); // this代表着调用accept方法的变量
    
            if (name.endsWith(fileterNameString))
            {
                return true;
            }
            return false;
        }
    
    }

    我们测试下结果

    public class Test2
    {
    
        public static void main(String[] args) throws IOException
        {
    
            File file2 = new File("E:/test");
            
            TxtFilter filter=new TxtFilter(".txt"); //过滤器,只需要.txt结尾的
            
            String[] list = file2.list(filter);
    
            for (int i = 0; i < list.length; i++)
            {
                System.out.println(list[i]); // 结果为1.txt
            }
    
        }
    }



      


    展开全文
  • java中File类方法详解

    万次阅读 多人点赞 2019-04-24 17:10:48
    File类简介   在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与平台无关的方法来操作文件,File类主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和...

    File类简介

      在 Java 中,File 类是 java.io 包中唯一代表磁盘文件本身的对象。File 类定义了一些与平台无关的方法来操作文件,File类主要用来获取或处理与磁盘文件相关的信息,像文件名、 文件路径、访问权限和修改日期等,还可以浏览子目录层次结构。
      File 类表示处理文件和文件系统的相关信息。也就是说,File 类不具有从文件读取信息和向文件写入信息的功能,它仅描述文件本身的属性。

    File类的相关方法

    1、构造方法

    • File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
    • File(String parent,String child) 根据指定的父路径和文件路径创建一个新File对象实例
    • File(File parent,String child) 根据指定的父路径对象和文件路径创建一个新的File对象实例

    代码实现过程

    /*
     - File的构造函数
     - */
     public static void main(String[] args) {
         //File(String pathname)  将指定路径名转换成一个File对象
         File file = new File("D:\\1.txt");
         System.out.println(file);
         //File(String parent,String child) 根据指定的父路径和文件路径创建File对象
         File file1 =  new File("D:\\a","1.txt");
         System.out.println(file1);
         //File(File parent,String child) 根据指定的父路径对象和文件路径创建File对象
         File parent = new File("D:\\a");
         File file2 = new File(parent, "1.txt");
         System.out.println(file2);
         File file3 = new File(new File("D:\\a"),"1.txt");
         System.out.println(file3);
    
     }
    

    运行结果在这里插入图片描述

    2、File类创建和删除功能

    • boolean createNewFile();指定路径不存在该文件时创建文件,返回true 否则false
    • boolean mkdir() 当指定的单击文件夹不存在时创建文件夹并返回true 否则false
    • boolean mkdirs() 但指定的多级文件夹在某一级文件夹不存在时,创建多级文件夹并返回true 否则false
    • boolean delete() 删除文件或者删除单级文件夹
    • 删除文件夹,这个文件夹下面不能有其他的文件和文件夹

    代码实现过程

    public static void main(String[] args) throws IOException {
        File file = new File("D:\\a\\1.txt");
        File file1 = new File("1.txt");
        boolean flag = file1.createNewFile();
        System.out.println(flag);
    
        File file2 = new File("b");
        boolean flag2 = file2.mkdir();
        System.out.println(flag);
    
        File file3 = new File("c\\d\\e");
        boolean d = file1.mkdir();
        boolean c = file1.mkdirs();
        System.out.println(d);
        System.out.println(c);
        File file4 = new File("c.txt");
        System.out.println(file4.mkdir());
    
        File file5 = new File("b");
        System.out.println(file2.delete());
    }
    

    运行结果在这里插入图片描述

    3、File类的判断功能

    • boolean exists() 判断指定路径的文件或文件夹是否为空
    • boolean isAbsolute() 判断当前路径是否是绝对路径
    • boolean isDirectory() 判断当前的目录是否存在
    • boolean isFile() 判断当前的目录是否是一个文件
    • boolean isHidden() 判断当前路径是否是一隐藏文件

    代码实现过程

    public static void main(String[] args) throws IOException {
      // method();
      //  method2();
      //   method3();
      //  method4();
    }
    //判断文件是否存在
    public static void method() throws IOException {
        File file = new File("a.txt");
        file.createNewFile();
        boolean flag = file.exists();
        System.out.println(flag);
    }
    //判断当前路径是否为绝对路径
    public static void method2() throws IOException{
        File file = new File("D:\\a\\1.txt");
        boolean flag = file.isAbsolute();
        System.out.println(flag);
    }
    //判断当前是文件夹还是文件
    public static void method3() throws IOException{
        File file = new File("1.txt");
        File file1 = new File("b");
        file1.mkdir();
        boolean flag = file.isDirectory();
        boolean flag2 = file1.isFile();
        System.out.println(flag);
        System.out.println(flag2);
    }
    //判断当前路径是否为隐藏文件
    public static void method4() throws IOException{
       File file =  new File("D:\\a\\1.txt");
        System.out.println(file.isHidden());
    }
    

    运行结果

    • method()
      在这里插入图片描述
    • method2()
      在这里插入图片描述
    • method3()
      在这里插入图片描述
    • method4()
      在这里插入图片描述

    4、File类的获取功能和修改名字功能

    • File getAbsoluteFile() 获取文件的绝对路径,返回File对象
    • String getAbsolutePath() 获取文件的绝对路径,返回路径的字符串
    • String getParent() 获取当前路径的父级路径,以字符串形式返回该父级路径
    • String getName() 获取文件或文件夹的名称
    • String getPath() 获取File对象中封装的路径
    • long lastModified() 以毫秒值返回最后修改时间
    • long length() 返回文件的字节数
    • boolean renameTo(File dest) 将当前File对象所指向的路径修改为指定File所指向的路径

    代码实现过程:

    public static void main(String[] args) throws IOException {
       //  method();
       // method2();
       // method3();
       // method4();
    }
    public static void method(){
        File file = new File("D:\\a\\1.txt");
        File file1 = new File("1.txt");
        //以File对象返回的形式返回当前File对象所指向的绝对路径
        System.out.println(file1.getAbsoluteFile());
        //返回File对象所指向的绝对路径
        System.out.println(file1.getAbsolutePath());
    }
    public static void method2() throws IOException {
        File file = new File("a.txt");
        File file1 = new File("b","c.txt");
        System.out.println(file1.createNewFile());
    
        File parent = new File("b");
        File file2 = new File(parent,"c.txt");
        if (!parent.exists()){
            parent.mkdirs();
        }
        System.out.println(file2.createNewFile());
        System.out.println(file2.getParent());
        System.out.println(file2.getParentFile());
    }
    public static void method3() throws IOException{
       File file = new File("1.txt");
       File file1 = new File("D:\\a\\1.txt");
       File file2 = new File("b");
    
        System.out.println(file.getName());
        System.out.println(file1.getName());
        System.out.println(file2.getName());
    
        System.out.println(file.getPath());
        System.out.println(file1.getPath());
        System.out.println(file2.getPath());
    
        System.out.println(file.lastModified());
        Date date =  new Date(1556085068524L);
        System.out.println(date.toLocaleString());
    
        System.out.println(file.length());
        System.out.println(file2.length());
    }
    public static void method4() throws IOException{
        File file = new File("a.txt");
        File file1 = new File("e.txt");
        System.out.println(file.renameTo(file1));
    }
    

    运行结果

    • method()
      在这里插入图片描述
    • method2()在这里插入图片描述
    • method3()

    在这里插入图片描述

    • method4()
      在这里插入图片描述

    5、File 类的其他获取功能

    • String[] list(); 以字符串的形式返回当前路径下所有的文件和文件夹的名称
    • File[] listFile 以File对象的形式返回当前路径下的所有文件和文件夹名称
    • Static File[] listRoots() 获取计算机中的所有盘符
      代码实现过程
    public static void main(String[] args) {
        //method();
       // method2();
        //method3();
    }
    
    public static void method(){
        File file = new File("b");
        File file1 = new File("D:\\QQ\\1916247350");
        File file2 = new File("e.txt");
        String[] files = file1.list();
        for (int i=0;i<files.length;i++){
            System.out.println(files[i]);
        }
    }
    public static void method2(){
        File file = new File("b");
        File file1 = new File("D:\\QQ\\1916247350");
        File file2 = new File("e.txt");
    
        File[] files = file1.listFiles();
        for (File file3 : files) {
            System.out.println(file3.getName());
        }
    }
    public static void method3(){
        File[] files = File.listRoots();
        for (File file : files) {
            System.out.println(file);
        }
    }
    

    运行结果

    • method()在这里插入图片描述
    • method2()在这里插入图片描述
    • method(3)在这里插入图片描述

    练习

    1、输出指定目录下的所有java文件
    public static void main(String[] args) {
        File file = new File("D:\\IDEA\\IDEAprogram");
        method(file);
    }
    public static void method(File file){
    //判断文件是够是目录文件
        if (file.isDirectory()){
            File[] files = file.listFiles();
            for (File file1 : files) {
            //判断是否为文件
                if (file1.isFile()){
                //判断文件是否是以.java结尾的文件
                    if (file1.getName().endsWith(".java")){
                        System.out.println(file1.getName());
                    }
                }else if (file1.isDirectory()){  
                //回调,遍历file1
                    method(file1);
                }
            }
        }
    }
    

    运行结果
    在这里插入图片描述

    2、删除指定的目录(包括子目录)
    public static void main(String[] args) {
        File file = new File("D:\\a");
        method(file);
    }
    //删除指定目录下的文件
    public static void method(File file){
        //删除自己所有的子文件和子目录
        //获取子文件和子目录
        if (file.isDirectory()){
            File[] files = file.listFiles();
            for (File file1 : files) {
                if (file1.isFile()){
                    System.out.println(file1.getName());
                    //干掉它
                    file1.delete();
                }else if (file1.isDirectory()){
                    //继续查看
                    method(file1);
                }
            }
            //干掉自己
            System.out.println(file.getName());
            file.delete();
        }
    }
    

    代码运行结果
    在这里插入图片描述

    学习过程中一定要稳下来,不要急,要注意多总结,以便日后复习。

    展开全文
  • inputStream转File

    万次阅读 2021-12-08 08:40:40
    inputStream转File,获取到File,注意下方的文件名后缀请更改为自己文件的后缀 publicstaticFileasFile(InputStreaminputStream)throwsIOException{ Filetmp=File.createTempFile("lzq",".tmp",newFile("C:\\")); ...
  • ValueError: File is not a recognized excel file ValueError:文件不是可识别的excel文件 这个错误的原因是xlsx文件本身的问题,可能是wps或是Excel保存格式出错无法被识别。 之后重新制作xlsx文件并完整保存 ...
  • cannot open shared object file: No such file or directory 解决办法: 1、此时ldd xxx查看依赖缺少哪些库 libmysqlcppconn.so.7 => not found libboost_system.so.1.64.0 => not found 2、设置变量LD_...
  • In file(file, "rt") : 无法打开文件'fileurl': No such file or directory > ``` **请教各位大神,为啥无法打开文件,万分感谢** 已经尝试过setwd,文件夹没有问题,是目录的文件夹 ``` > getwd() [1] "D:/coursera...
  • File和MultipartFile互转

    千次阅读 2022-04-12 17:14:41
    * MultipartFile 转 File * * @param multipartFile * @throws Exception */ public static File MultipartFileToFile(MultipartFile multipartFile) { File file = null; //判断是否为null if ...
  • File f = new File怎么用?

    千次阅读 2021-04-27 17:43:26
    例:File f = new File(“D:\Folder”); 这名话并不真正会创建D:\Folder 这个文件。 而是创建了一个代表 D:\Folder 这个文件的一个File对象。 你需要判断,如果文件不存在,再创建,如: File f = new File(“D:\Folder...
  • JavaScript 文件对象File

    万次阅读 2021-01-21 15:51:45
    在浏览器中操作文件,多数情况下用到的是 File 对象,从<input type='file' />元素获取,进而继续操作(例如将选择的图片展示在页面上,用ajax将文件上传至服务器等)。这里介绍在浏览器中操作文件的相关API. ...
  • 其实对于如何使用FileProvider,其实在FileProvider的API页面也有详细的步骤,有兴趣的可以看下。 https://developer.android.com/reference/android/support/v4/content/FileProvider.html FileProvider...
  • Error in file(file, "rt") : cannot open the connection In addition: Warning message: In file(file, "rt") :cannot open file 'data.csv': No such file or directory 目录 Error in file(file, "rt") : ...
  • 详述java的File类常用方法

    千次阅读 多人点赞 2019-08-21 17:17:27
    File类: File类代表一个特定的文件或者目录(文件夹),并提供了若干方法对该文件或目录进行操作。 File类构造方法: 常用的有三种: 1、File(String pathname):通过路径名创建一个新 File 实例。 2、File(File ...
  • java中File转为MultipartFile的四种方式

    万次阅读 多人点赞 2022-02-25 15:08:33
    java中File转为MultipartFile的四种方式
  • java.io.File 类是文件和目录路径名的抽象表示 主要用于文件和目录的创建 查找和删除等操作 Java将电脑中的文件和文件夹目录封装为了一个File类 可以使用File类对文件和文件夹进行操作 可以使用File的方法来: 创建...
  • file.exists(),file.isFile()和file.isDirectory()的区别

    万次阅读 多人点赞 2020-05-19 16:29:33
    file.exists(),file.isFile()和file.isDirectory()的区别 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。...
  • MultipartFile 转File的几种方式

    万次阅读 多人点赞 2021-09-09 14:57:37
    一、MultipartFile转File 二、代码示例 1.第一种方式 2.第二种方式 3.第三种方式 总结 前言 最近写项目有个需求是上传Excel文件并读取Excel文件中的内容,项目采用的是前后端分离的模式,前端采用FormData...
  • File类的概述和构造方法 A:File类的概述 查看API 文件和目录路径名的抽象表示形式 这个File类可以用来表示文件,也可以用来表示目录 B:构造方法 File(String pathname):根据一个路径得到File对象 File(String parent...
  • file和inputstream相互转换

    万次阅读 2022-01-21 15:29:09
    File --> InputStream InputStream in = new FileInputStream(file); InputStream --> File public void inputstreamtofile(InputStream ins,File file){ OutputStream os = new FileOutputStream(file); ...
  • File类遍历文件夹

    千次阅读 2022-02-13 15:04:05
    public class Demo_01 { /* 用File类便利文件夹 */ ... File file = new File("E:\\aaaa"); printFile(file); } public static void printFile(File file){ File[] files = file.listFiles()
  • vue Already included file name XXX differs from file name XXX only in casing. 解决方法:把.vue后缀删掉
  • Java File exists()方法

    万次阅读 2021-02-26 18:00:16
    Java File exists()方法java.io.File.exists()方法测试此抽象路径名定义的文件或目录是否存在。1 语法public boolean exists()2 参数无3 返回值当且仅当由抽象路径名确定文件是否存在,则该方法返回布尔值true;否则...
  • python No such file or Directory

    千次阅读 2021-02-09 04:39:31
    python No such file or Directorypython在操作文件的时候,如果出现如下错误:python: can't open file 'myfile.txt': [Errno 2] No such file or directory或者是如下错误:IOError : No such file or directory...
  • JAVA 将MultipartFile file转换成为File

    万次阅读 2019-10-31 13:14:04
    public static File MultipartFileToFile(MultipartFile multiFile) { // 获取文件名 String fileName = multiFile.getOriginalFilename(); // 获取文件后缀 String prefix = fileName.su...
  • 将MultipartFile转换为File方法。

    万次阅读 2022-03-31 16:27:59
    将MultipartFile转换为File方法如下: /** * 将MultipartFile转换为File * @param multiFile * @return */ public static File MultipartFileToFile(MultipartFile multiFile) { // 获取文件名 String ...
  • 为何使用 File file = new File(“文件名”); 无法创建文件? 运行javac TextEditorFrame.java编译通过,再运行java TextEditorFrame也通过,但是在F:\java文件夹中找不到"Text.txt"文件 有两种解救办法 1if(file....
  • Linux下出现Read-only file system解决办法

    万次阅读 2021-11-04 14:41:18
    涉及到修改/保存条目等需要写磁盘操作的命令都无法使用(如tar、cp、mv、rm、chmod、chown、wget下载等指令),总是提示Read-only file system,也就是说系统是只读的,什么也写不了。 解决方案 查看/etc/fstab文件...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,134,227
精华内容 2,853,690
关键字:

flie

友情链接: commercial-paper.zip