目录
一、前言
二、File类
2.1 定义
2.2 构造器
2.3 常用方法
三、MultipartFile类
3.1 定义
3.2 常用方法
四、File类和MultipartFile类的转换
4.1 Multipartfile转File类型
4.2 File转Multipartfile类型
4.3创建MultiPartfile需要的参数
之前使用这两个类的时候,都是现用现找,没有太研究过,最近研究文档的上传和解析,觉得有必要对这两个类进行一下深入的学习,总结成文,做个笔记吧。
File类(文件类)是java.io包中的类,是以抽象的方式代表文件名和目录路径名。该类主要用于文件和目录的创建、文件的查找和文件的删除等。
File类代表磁盘中实际存在的文件和目录,这个文件或者目录的路径可以是绝对路径,也可以是相对路径。
1、根据路径名字符串转换为抽象路径名来创建一个新 File 实例。
public File(String pathname){...}
如果pathname为空,会抛出NullPointerException空指针异常。
2、根据parent路径名字符串和child路径名字符串创建一个新 File 实例。
public File(String parent, String child){...}
会以父路径作为目录,子路径作为父路径下的目录或者文件名,最后得到的实例对象的路径就是父路径和子路径的组合。
如果parent为null,会以子路径作为绝对路径创建实例,等同于调用第一个public File(String pathname)效果一样。
如果子路径child为Null,会抛出NullPointerException空指针异常。
3、根据父路径的File实例对象和子路径名字符串创建一个新的File实例。
public File(File parent, String child){...}
等同于第二种构造器,这个构造器是父路径字符串的File实例对象传进去。
举例:
public static void main(String[] args)
{
//父路径字符串
String parent = "F:/testFile";
File parentFile= new File(parent);
//子路径字符串
String child = "F:/testFile/test.txt";
//两种构造器实例化File对象
File file1 = new File(parent, child);
File file2 = new File(parentFile, child);
//两种构造器的实例化出的对象的结果
System.out.println(file1.getPath()); // 结果为 F:\testFile\F:\testFile\test.txt
System.out.println(file2.getPath()); // 结果为 F:\testFile\F:\testFile\test.txt
}
使用这样三种File对象,来测试每种的方法的结果。
//文件
File file = new File("F:\\测试文件.txt");
//目录
File dirFile = new File("F:\\work");
//错误格式
File errorFile = new File("haha");
1、获取实例对象代表的文件名字:public String getName()
System.out.println("文件File对象:"+file.getName()); //输出为 "文件File对象:测试文件.txt"
System.out.println("目录File对象:"+dirFile.getName()); //输出为 "目录File对象:work"
System.out.println("相对路径文件夹:"+errorFile.getName()); //输出为 "相对路径文件夹:haha"
2、获取实例对象代表的文件上级目录,如果此路径名没有指定父目录,则返回 null:public String getParent()
System.out.println("文件File对象:"+file.getParent()); //输出为 "文件File对象:F:\"
System.out.println("目录File对象:"+dirFile.getParent()); //输出为 "目录File对象:F:\"
System.out.println("相对路径文件夹:"+errorFile.getParent()); //输出为 "相对路径文件夹:null"
3、获取实例对象的父路径的实例,如果此路径名未指定父目录,则返回null,也就是获取对象的上级目录然后再实例化一个对象:public File getParentFile()
System.out.println("文件File对象:"+file.getParentFile()); //输出为 "文件File对象:F:\"
System.out.println("目录File对象:"+dirFile.getParentFile()); //输出为 "目录File对象:F:\"
System.out.println("相对路径文件夹:"+errorFile.getParentFile()); //输出为 "相对路径文件夹:null"
4、获取实例对象的实际路径名字符串:public String getPath()
System.out.println("文件File对象:"+file.getPath()); //输出为 "文件File对象:F:\测试文件.txt"
System.out.println("目录File对象:"+dirFile.getPath()); //输出为 "目录File对象:F:\work"
System.out.println("相对路径文件夹:"+errorFile.getPath()); //输出为 "相对路径文件夹:haha"
5、测试此实例对象的路径是否为绝对路径:public boolean isAbsolute()
System.out.println("文件File对象:"+file.isAbsolute()); //输出为 "文件File对象:true"
System.out.println("目录File对象:"+dirFile.isAbsolute()); //输出为 "目录File对象:true"
System.out.println("相对路径文件夹:"+errorFile.isAbsolute()); //输出为 "相对路径文件夹:false"
6、获取实例对象的绝对路径名字符串:public String getAbsolutePath()
System.out.println("文件File对象:"+file.getAbsolutePath()); //输出为 "文件File对象:F:\测试文件.txt"
System.out.println("目录File对象:"+dirFile.getAbsolutePath()); //输出为 "目录File对象:F:\work"
System.out.println("相对路径文件夹:"+errorFile.getAbsolutePath()); //输出为 "相对路径文件夹:F:\xx\firstproject\haha F:\xx\firstproject 是工作空间路径"
7、测试应用程序是否可以读取此实例对象表示的文件:public boolean canRead()
System.out.println("文件File对象:"+file.canRead()); //输出为 "文件File对象:true"
System.out.println("目录File对象:"+dirFile.canRead()); //输出为 "目录File对象:true"
System.out.println("相对路径文件夹:"+errorFile.canRead()); //输出为 "相对路径文件夹:false"
8、测试应用程序是否可以修改此实例对象表示的文件:public boolean canWrite()
System.out.println("文件File对象:"+file.canWrite()); //输出为 "文件File对象:true"
System.out.println("目录File对象:"+dirFile.canWrite()); //输出为 "目录File对象:true"
System.out.println("相对路径文件夹:"+errorFile.canWrite()); //输出为 "相对路径文件夹:false"
9、测试实例对象表示的文件或目录是否存在:public boolean exists()
System.out.println("文件File对象:"+file.exists()); //输出为 "文件File对象:true"
System.out.println("目录File对象:"+dirFile.exists()); //输出为 "目录File对象:true"
System.out.println("相对路径文件夹:"+errorFile.exists()); //输出为 "相对路径文件夹:false"
10、测试实例对象是否是一个目录: public boolean isDirectory()
System.out.println("文件File对象:"+file.isDirectory()); //输出为 "文件File对象:false"
System.out.println("目录File对象:"+dirFile.isDirectory()); //输出为 "目录File对象:true"
System.out.println("相对路径文件夹:"+errorFile.isDirectory()); //输出为 "相对路径文件夹:false"
11、测试实例对象是否是一个文件:public boolean isFile()
System.out.println("文件File对象:"+file.isFile()); //输出为 "文件File对象:true"
System.out.println("目录File对象:"+dirFile.isFile()); //输出为 "目录File对象:false"
System.out.println("相对路径文件夹:"+errorFile.isFile()); //输出为 "相对路径文件夹:false"
12、删除此实例对象表示的文件或目录:public boolean delete()
13、创建此实例对象指定的目录:public boolean mkdir()
14、创建此实例对象指定的目录,包括创建必需但不存在的父目录:public boolean mkdirs()
15、 重新命名此实例对象表示的文件:public boolean renameTo(File dest)
16、返回由此实例对象表示的文件的长度:public long length()
多部分请求中收到的上载文件的表示形式。
文件内容要么存储在内存中,要么临时存储在磁盘上。无论哪种情况,用户都可以根据需要负责将文件内容复制到会话级或持久性存储中。临时存储将在请求处理结束时清除。
1、以字节数组形式返回文件的内容:byte[] getBytes() throws IOException
2、返回文件的内容类型:String getContentType()
3、返回一个InputStream,以从中读取文件的内容:InputStream getInputStream() throws IOException
4、 返回参数的名称:String getName()
5、返回客户端文件系统中的原始文件名:String getOriginalFilename()
6、返回文件的大小(以字节为单位)如果为空,则为空字节数组:long getSize()
7、判断是否为空,或者上传的文件是否有内容:boolean isEmpty()
8、将收到的文件传输到给定的目标文件:void transferTo(File dest) throws IOException, IllegalStateException
这可以在文件系统中移动文件,在文件系统中复制文件,或将内存保存的内容保存到目标文件。
如果目标文件已经存在,则将首先删除它。 如果文件已在文件系统中移动,则无法再次调用此操作。因此,只需调用一次此方法即可使用任何存储机制。
//创建一个file对象
File file = new File(path);
//将multipartFile的输入流,拷贝到file对象,此时file对象的内容就是mutipartFile中的内容
FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);
//创建file对象
File file = new File("d:/test.txt");
//获取file对象的文件输入流
FileInputStream input = new FileInputStream(file);
MultipartFile multipartFile =new MockMultipartFile("test.txt", file.getName(), "text/plain", IOUtils.toByteArray(input));
MultipartFile mulFile = new MockMultipartFile(
"test.txt", //文件名
"test.txt", //文件在客户机上的文件名
ContentType.APPLICATION_OCTET_STREAM.toString(), //文件类型
new FileInputStream(file) //文件流
);