java file创建文件 转换为 MultipartFile

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java file创建文件 转换为 MultipartFile相关的知识,希望对你有一定的参考价值。

File dir = new File(path);
File[] files = dir.listFiles();
for(File file:files)
这儿怎么将file 转换为 MultipartFile 对象或者是 添加到 MultipartFile 对象中

package test;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.oreilly.servlet.MultipartRequest;

@SuppressWarnings("serial")
public class TestServlet extends HttpServlet
@Override
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
MultipartRequest mr=null;
//用来限制用户上传文件大小的
int maxPostSize = 1 * 100 * 1024 * 1024;
//第一个参数为传过来的请求HttpServletRequest,
//第二个参数为上传文件要存储在服务器端的目录名称
//第三个参数是用来限制用户上传文件大小
//第四个参数可以设定用何种编码方式来上传文件名称,可以解决中文问题
mr = new MultipartRequest(request, "E:\\zhang", maxPostSize, "GBK");
//传回所有文件输入类型的名称
Enumeration files = mr.getFileNames();
String fileName = "";
String filePath="";
while (files.hasMoreElements())
fileName = (String) files.nextElement();
System.out.println("FileName============"+fileName);
//用此方法得到上传文件的真正的文件名,这里的fileName指文件输入类型的名称
filePath = mr.getFilesystemName(fileName);
System.out.println("FilePath============"+filePath);
//此方法得到一个文件对象,代表储存在服务器上的fileName文件
File f = mr.getFile(fileName);
if (null == f)
throw new ServletException("file is not exist");

//可以取得请求参数的名称
Enumeration enum1=mr.getParameterNames();
while (enum1.hasMoreElements())
String s=(String)enum1.nextElement();
System.out.println(s);
String[] str=mr.getParameterValues(s);
for (int i=0;i<str.length;i++)
System.out.println(str[i]);




追问

大哥 你看好,我是要从磁盘读取,不是要上传上去的

参考技术A File f = (File) xxx 强转即可。前提是要配置multipartResolver,要不然会报类型转换失败的异常。
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="104857600"/>
<property name="maxInMemorySize" value="4096"/>
</bean>
参考技术B 你要做什么,是上传功能么?追问

磁盘读取打包,进行下载

追答

你是在用spring么?MultipartFile 主要用来上传。如果下载,你只要搜一下jsp文件下载就有多文章,我这里就不啰嗦了,如果是要打包多个文件进行下载,那么你就先把多个文件打包成zip或其他格式,然后在实现下载即可。

本回答被提问者采纳

Java File类的学习

File类的概述

java.io.File类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。

 

File类部分构造方法

/**
 * 从父抽象路径名和子路径名字符串创建新的File实例。
 */
private File(String child, File parent) {
    ...
}

/**
 * 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
 */
public File(String pathname) {
    ...
}

 

路径分隔符和默认名称分隔符

// 依赖于系统的默认名称分隔符字符。此字段初始化为包含系统属性<code>file.separator</code>值的第一个字符。
// 在UNIX系统上,此字段的值为<code>‘/‘</code>;在Microsoft Windows系统上,此字段的值为<code>‘‘</code>。
public static final char separatorChar = fs.getSeparator();
// 依赖于系统的默认名称分隔符字符,为方便起见表示为字符串。
public static final String separator = "" + separatorChar;
// 依赖于系统的路径分隔符字符。此字段初始化为包含系统属性<code>path.separator</code>值的第一个字符。
// 此字符用于将文件名按<em>路径列表指定的文件序列分隔开。在UNIX系统上,此字符为<code>‘:‘</code>;
// 在Microsoft Windows系统上,此字符为<code>‘;‘</code>。
public static final char pathSeparatorChar = fs.getPathSeparator();
// 依赖于系统的路径分隔符字符,为了方便起见表示为字符串
public static final String pathSeparator = "" + pathSeparatorChar;

下面以基于Unix系统的macOS系统为例

 

依赖于系统的默认名称分隔符

import java.io.File;

public class Demo01Separator {
    public static void main(String[] args) {
        // 依赖于系统的默认名称分隔符字符。
        char separatorChar = File.separatorChar;
        System.out.println("系统的默认名称分隔符字符是‘" + separatorChar + "‘");

        // 依赖于系统的默认名称分隔符字符,为方便起见表示为字符串。
        String separatorString = File.separator;
        System.out.println("系统的默认名称分隔符字符是‘" + separatorString + "‘");
    }
}
控制台输出:
系统的默认名称分隔符字符是‘/‘
系统的默认名称分隔符字符是‘/‘

 

依赖于系统的路径分隔符

import java.io.File;

public class Demo01PathSeparator {
    public static void main(String[] args) {
        // 依赖于系统的路径分隔符字符
        char pathSeparatorChar = File.pathSeparatorChar;
        System.out.println("依赖于系统的路径分隔符字符是‘" + pathSeparatorChar + "‘");

        // 依赖于系统的路径分隔符字符,为了方便起见表示为字符串
        String pathSeparatorString = File.pathSeparator;
        System.out.println("依赖于系统的路径分隔符字符是‘" + pathSeparatorString + "‘");
    }
}
控制台输出:
依赖于系统的路径分隔符字符是‘:‘
依赖于系统的路径分隔符字符是‘:‘

程序很多时候都是跨平台的,所以不要把路径写死,可以使用以上几个静态成员变量获取分隔符

 

File类的部分构造方法的使用

public class Demo02File {
    public static void main(String[] args) {
        // 通过将给定的路径名字符串转换为抽象路径名来创建新的File实例。
        File file1 = new File("~/IdeaProjects/Study/src/view/study/demo27/Demo02File.java");
        System.out.println(file1);

        // 从父抽象路径名和子路径名字符串创建新的File实例。
        File file2 = new File("~/IdeaProjects/Study/", "/src/view/study/demo27/Demo02File.java");
        System.out.println(file2);
    }
}
 
控制台输出:
~/IdeaProjects/Study/src/view/study/demo27/Demo02File.java
~/IdeaProjects/Study/src/view/study/demo27/Demo02File.java

 

File类获取功能的常用方法

public String getAbsolutePath():返回此File的绝对路径名字符串。

public String getPath():将此File转换为路径名字符串。

public String getName():返回由此File表示的文件或目录的名称。

public long length():返回由此File表示的文件的长度。

 

这几个方法的使用

import java.io.File;

public class Demo01FileMethod {
    public static void main(String[] args) {
        File file = new File("~/IdeaProjects/Study/src/view/study/demo27/Demo01FileMethod.java");

        // 返回此File的绝对路径名字符串。
        String fileAbsolutePath = file.getAbsolutePath();

        // 将此File转换为路径名字符串。
        String filePath = file.getPath();

        // 返回由此File表示的文件或目录的名称。
        String fileName = file.getName();

        // 返回由此File表示的文件的长度。
        long fileLength = file.length();

        System.out.println("绝对路径:" + fileAbsolutePath);
        System.out.println("路径名字符串:" + filePath);
        System.out.println("文件或目录的名称:" + fileName);
        System.out.println("文件的长度:" + fileLength);
    }
}
控制台输出:
绝对路径:/Users/liyihua/IdeaProjects/Study/~/IdeaProjects/Study/src/view/study/demo27/Demo01FileMethod.java
路径名字符串:~/IdeaProjects/Study/src/view/study/demo27/Demo01FileMethod.java
文件或目录的名称:Demo01FileMethod.java
文件的长度:0

文件路径不存在,返回文件的长度为0

 

File类判断功能的常用方法

public boolean exists():此File表示的文件或目录是否实际存在。

public boolean isDirectory():此File表示的是否为目录。

public boolean isFile():此File表示的是否为文件。

 

这几个方法的使用

import java.io.File;

public class Demo02FileMethod {
    public static void main(String[] args) {
        File file = new File("/Users/liyihua/IdeaProjects/Study/src/view/study/demo27");

        boolean exiFile = file.exists();
        boolean isD = file.isDirectory();
        boolean isF = file.isFile();

        System.out.println("文件或目录是否实际存在:" + exiFile);
        System.out.println("是否为目录:" + isD);
        System.out.println("是否为文件:" + isF);
    }
}
控制台输出:
文件或目录是否实际存在:true
是否为目录:true
是否为文件:false

判断是否为文件或是否为目录的时候,路径必须存在,否则都返回false(计算机中只有文件和目录)

 

File类创建删除功能的常用方法

public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件。

public boolean delete():删除由此File表示的文件或目录。

public boolean mkdir():创建由此File表示的目录。

public boolean mkdirs():创建由此File表示的目录,包括任何必需但不存在的父目录。

 

创建一个新的空文件

import java.io.File;
import java.io.IOException;

public class Demo03FileMethod {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/test.txt");

        file.createNewFile();
    }
}
所在的目录下创建了一个文件——test.txt

 

删除一个文件或目录

import java.io.File;
import java.io.IOException;

public class Demo04FileMethod {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/test.txt");

        file.delete();
    }
}
所在的目录下的一个文件(test.txt)被删除

 

创建一个目录

import java.io.File;
import java.io.IOException;

public class Demo05FileMethod {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/test");

        file.mkdir();
    }
}
所在的目录下创建了一个目录——test

 

创建一个目录集(父子爷孙目录)

import java.io.File;
import java.io.IOException;

public class Demo06FileMethod {
    public static void main(String[] args) throws IOException {
        File file = new File("/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/t1/t2/t3");

        file.mkdirs();
    }
}
在目录“/Users/liyihua/IdeaProjects/Study/src/view/study/demo27”下创建了目录 /t1/t2/t3

 

File类目录的遍历功能

public String[] 1ist():返回一个String数组,表示该File目录中的所有子文件或目录。
public File[] listFiles():返回一个File数组,表示该File目录中的所有的子文件或目录。

 

这两个方法的使用

import java.io.File;

public class Demo07FileMethod {
    public static void main(String[] args) {
        File file = new File("/Users/liyihua/IdeaProjects/Study/src/view/study/demo27");

        // 返回一个String数组
        String[] stringList = file.list();
        // 返回一个File数组
        File[] fileList = file.listFiles();

        // 遍历数组
        for (String s : stringList) {
            System.out.println(s);
        }
        System.out.println("

");
        for (File f : fileList) {
            System.out.println(f);
        }
    }
}
控制台输出:
Demo01PathSeparator.java
Demo01File.java
Demo01FileMethod.java
Demo06FileMethod.java
Demo07FileMethod.java
Demo02FileMethod.java
了解File类
Demo05FileMethod.java
Demo02File.java
Demo04FileMethod.java
Demo01Separator.java
Demo03FileMethod.java



/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo01PathSeparator.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo01File.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo01FileMethod.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo06FileMethod.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo07FileMethod.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo02FileMethod.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/了解File类
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo05FileMethod.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo02File.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo04FileMethod.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo01Separator.java
/Users/liyihua/IdeaProjects/Study/src/view/study/demo27/Demo03FileMethod.java

 

          

以上是关于java file创建文件 转换为 MultipartFile的主要内容,如果未能解决你的问题,请参考以下文章

java File类

Java File文件操作

JAVA-基础(File类)

Java File

Java File文件操作

Java之File与递归