探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类

转载自     探究Java File类中list()、listFiles()的使用及区别,认识和使用匿名内部类

 

内容概要:

1、认识File类;

2、File的构造函数;

3、list()及其重载方法的使用,匿名内部类的两种使用方式;

4、listFiles()方法和list()方法的区别,listFiles()及其重载方法的使用。

 

--------------------------------1、认识File类--------------------------------

File类的名字会有一定的误导性:我们很容易的认为它指代的是文件。实际上并不是这样的。

其实它解决的是文件或者是文件夹的路径问题。如果使用FilePath这个名字会更好些(可惜Java最初没有这么做)。

 

--------------------------------2、File的构造函数---------------------------

 File类的构造函数有以下几种:
 1)、File(String pathname) 

 2)、File(String parent, String child) 

 3)、File(File parent, String child)

 4)、File(URI uri) 

构造的File类对象表示一个路径,指向我们的目标文件或文件夹。

File path = new File(".");  表示当前目录。

File path = new File("E:\\Java"); 表示Windows下的E盘里的Java文件(或者是文件夹),注意要用双斜线\\。

File path = new File(new File("."),"bin"); 表示当前文件夹下的bin文件(文件夹),如果没有bin就会抛出NullPointerException异常。

 

--------------------------------3、list()及其重载方法的使用,匿名内部类的两种使用方式---------------------------

list()方法 : 会返回一个字符数组,将制定路径下的文件或文件夹名字存储到String数组中。因为其返回的是一个String类型的数组,所以它也就只是一个名字而已(后面要讲到的listFiles()及其重载方法则不同,它们返回的是File类型的对象,所以具有其全部的属性和方法)。有以下两种重载方式:

1)、String[]  list()

2)、String[]  list(FilenameFilter filter)

 

下面是File构造函数和list()方法的简单应用:

package com.lj95801.iosystem;  import java.io.File;  import org.junit.Test;  public class tFile1 {  /* * File类的构造函数有以下几种: * 1)、File(File parent, String child); * 2)、File(String pathname)  * 3)、File(String parent, String child)  * 4)、File(URI uri)  */  @Test  public void test1(){  //1、new File(".")构建的是当前目录的路径  File path = new File(".");  String[] list = path.list();  for(String itemName : list){  System.out.println(itemName);  }  //2、new File("E:\\Java")利用绝对路径构建E盘下的Java目录路径  System.out.println("--------->");  path = new File("E:\\Java");  list = path.list();  for(String itemName : list){  System.out.println(itemName);  }  //3、new File(new File("."),"bin")表示当前目录下的bin目录  System.out.println("--------->");  path = new File(new File("."),"bin");  list = path.list();//列出bin目录下的所有文件或者是文件夹  for(String itemName : list){  System.out.println(itemName);  }  }  
}  

运行结果如下:


 

下面进一步讲String[]  list(FilenameFilter filter)和匿名内部类的用法。

FilenameFilter filter是一个目录过滤器。list(FilenameFilter filter)方法会选择符合条件的文件或文件夹。为了能理解这个函数的工作原理,下面列出了其源码(这个是Java类库中的源码,注释是我自己添加的):

public String[] list(FilenameFilter filter) {  String names[] = list();  //首先还是调用<span style="font-family: Arial, Helvetica, sans-serif;">list()方法,获取指定目录下的全部文件(夹)名字</span>  if ((names == null) || (filter == null)) {  //<span style="font-family: Arial, Helvetica, sans-serif;">filter == null说明没有过滤条件</span>  return names;  }  ArrayList v = new ArrayList();  for (int i = 0 ; i < names.length ; i++) { //遍历names[]数组中的所有文件(夹)名字  if (filter.accept(this, names[i])) {   //如果<span style="font-family: Arial, Helvetica, sans-serif;">accept()方法返回真,则添加到ArrayList中</span>  v.add(names[i]);  }  }  return (String[])(v.toArray(new String[v.size()])); //将<span style="font-family: Arial, Helvetica, sans-serif;">ArrayList转换成String[]类型返回</span>  }  

可以看出,list(FilenameFilter filter)方法保存的是那些能够使filter.accept()方法返回true的文件名

 

list(FilenameFilter filter)的原理明白了,现在的问题是accept()方法又是怎么回事呢?

首先,filter.accept(this, names[i]);就可以看出,这是FilenameFilter中的方法。继续往上追溯FilenameFilter的源代码如下:

public  interface FilenameFilter {  /** * Tests if a specified file should be included in a file list. * * @param   dir    the directory in which the file was found. * @param   name   the name of the file. * @return  <code>true</code> if and only if the name should be * included in the file list; <code>false</code> otherwise. */  boolean accept(File dir, String name);  
}  

好!!终于明白了,FilenameFilter是一个接口。

现在理一下思路:

list(FilenameFilter filter)方法  ---------调用了-------> filter对象中的accept(File dir, String name)方法 ------> FilenameFilter是一个接口。

accept()方法会返回一个boolean类型的值,list()方法会根据这个返回值来决定是不是要将某个名字添加到返回列表中。所以,我们要在accept()方法中定义好挑选条件,由于是字符的选取,这会用到正则表达式。

所以,要使用list(FilenameFilter filter)方法就必须实现FilenameFilter接口,accept方法由我们自己定义,所以你想要让什么样的文件名能够使得accept方法返回ture(等价的就是你想要什么样的文件名能够被list方法返回)都由你自己决定了。

 

下面来看一看如何使用list(FilenameFilter filter)方法:

package com.lj95801.iosystem;  import java.io.File;  
import java.io.FileFilter;  
import java.io.FilenameFilter;  
import java.util.regex.Pattern;  import org.junit.Test;  public class tFile2 {  /* * list()方法 : 会返回一个字符数组,将制定路径下的文件或文件夹名(仅仅是个名字而已)存储到String数组中。有<span style="white-space:pre">  </span> * 以下几种: * 1)、list() * 2)、list(FilenameFilter filter) *  * FilenameFilter filter是一个目录过滤器。list(FilenameFilter filter)方法会选择 * 符合条件的文件或文件夹。为了能理解这个函数的工作原理,下面列出了其源码: *   public String[] list(FilenameFilter filter) { String names[] = list(); if ((names == null) || (filter == null)) { return names; } ArrayList v = new ArrayList(); for (int i = 0 ; i < names.length ; i++) { if (filter.accept(this, names[i])) { v.add(names[i]); } } return (String[])(v.toArray(new String[v.size()])); } *我们再往前追踪一下,看看FilenameFilter到底是怎样的,同时其accept()方法又有什么作用: *   interface FilenameFilter { * * Tests if a specified file should be included in a file list. * * @param   dir    the directory in which the file was found. * @param   name   the name of the file. * @return  <code>true</code> if and only if the name should be * included in the file list; <code>false</code> otherwise. boolean accept(File dir, String name); } * *我们可以看到,FilenameFilter只是一个接口,所以如果要用list(FilenameFilter filter)方法 *我们必须要实现这样的一个接口。accept()方法会返回一个boolean类型的值,list()方法会根据这个返回值 *来决定是不是要将某个名字添加到返回列表中。所以,我们要在accept()方法中定义好挑选条件,这会用到正则表达式。 * */  //一、采用实现接口的方式  class FileNameFilter1 implements FilenameFilter{  private Pattern pattern;  public FileNameFilter1(String regex) {  pattern = Pattern.compile(regex);  }  @Override  public boolean accept(File dir, String name) {  boolean result = pattern.matcher(name).matches();  return result;  }  }  /* * 二、采用匿名内部类的方式。 * 不用implements的方式来实现接口,但是定义一个静态方法,此静态方法返回一个FilenameFilter对象, * 本来正常的语句是return new FilenameFilter();但是在语句结束之前我说“等一下,我要在这里定义 * 一个类,类的具体实现我用一个大括号括起来”。 */  static class FileNameFilter2{  public static FilenameFilter filter(final String regex){  return new FilenameFilter(){  private Pattern pattern = Pattern.compile(regex);  @Override  public boolean accept(File dir, String name) {  return pattern.matcher(name).matches();  }  };  }  }  @Test  public void test2(){  System.out.println("------挑选当前目录下以.开头的文件或文件夹-------");  //1、挑选当前目录下以.开头的文件或文件夹,并且打印出来(创建一个类来实现FilenameFilter接口)  File path = new File(".");  String[] nameList = path.list(new FileNameFilter1("\\..*"));  for(String itemName : nameList){  System.out.println(itemName);  }  System.out.println("------挑选当前目录下以b开头的文件或文件夹-------");  //2、挑选当前目录下以b开头的文件或文件夹,并且打印出来(使用匿名内部类的方式来实现)  File path2 = new File(".");  String[] nameList2 = path2.list(FileNameFilter2.filter("b.*"));  for(String itemName : nameList2){  System.out.println(itemName);  }  System.out.println("------挑选当前目录下以s开头的文件或文件夹-------");  //3、将匿名内部类利用到极致  File path3 = new File(".");  String[] nameList3 = path3.list(new FilenameFilter(){//其实是在第二种方式的基础上精简过来的。  private Pattern pattern = Pattern.compile("s.*");  @Override  public boolean accept(File dir, String name) {  return pattern.matcher(name).matches();  }  });  for(String itemName : nameList3){  System.out.println(itemName);  }  }  
}  


执行结果如下:





--------------------------------4、listFiles()方法和list()方法的区别,listFiles()及其重载方法的使用---------------

list()和listFiles()方法的区别在于:

list()返回的是一个String类型数组,它只是一个数组,仅仅只是一个文件(文件夹)的名字而已;
而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法,比如:String getName()方法就能够返回该文件的String类型的文件名(名字而已)。


下面的前三个方法返回File[]类型,第四个返回static File[]类型。
返回类型 : 该路径下所有文件或文件夹的绝对路径(pathname,注意File类型指的是路径,而不是文件)
listFiles()

listFiles(FileFilter filter)

listFiles(FilenameFilter filter)

listRoots()

 

我们可以追踪一下FileFilter接口的源代码,加深理解(其实和FilenameFilter差不多):

public interface FileFilter {  /** * Tests whether or not the specified abstract pathname should be * included in a pathname list. * * @param  pathname  The abstract pathname to be tested * @return  <code>true</code> if and only if <code>pathname</code> *          should be included */  boolean accept(File pathname);  }  

也要实现accept方法,但是传入的参数不一样,它是File类型的。这样的话就好办了。

比如说,我要挑选文件夹:

class FileDirectory implements FileFilter{  @Override  public boolean accept(File pathname) {  return pathname.isDirectory();  }  
} 

再比如说,我要挑选可执行文件:

class FileDirectory implements FileFilter{  @Override  public boolean accept(File pathname) {  return pathname.canExecute();  }  
}  

下面给出一个例子,说明用法:

package com.lj95801.iosystem;  import java.io.File;  
import java.io.FileFilter;  
import java.io.FilenameFilter;  
import java.util.regex.Pattern;  import org.junit.Test;  public class tFile3 {  /* * list()和listFiles()方法的区别在于:list()返回的是一个String类型数组,它只是一个数组; * 而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法。 *  * 下面的前三个方法返回File[]类型,第四个返回static File[]类型。 * 返回类型 : 该路径下所有文件或文件夹的绝对路径(pathname,注意File类型指的是路径,而不是文件) * listFiles() * listFiles(FileFilter filter) * listFiles(FilenameFilter filter) * listRoots() *  */  @Test  public void test3(){  System.out.println("-----判别当前目录下的文件是否为文件夹----");  //1、列出当前目录下的所有文件和文件夹,保存为File类对象的数组,判别其是否为文件夹  File path = new File(".");  File[] files = path.listFiles();  for(File f : files){  System.out.println(f + " ---> is a Directory? " + f.isDirectory());  }  System.out.println("-----挑选出当前目录下的所有文件夹----");  //2、挑选出当前目录下的所有文件夹  File path2 = new File(".");  File[] files2 = path2.listFiles(new FileFilter(){  @Override  public boolean accept(File pathname) {  return pathname.isDirectory();  }  });  for(File f : files2){  System.out.println(f);  }  System.out.println("-----挑选出当前目录下的所有以s开头的文件夹----");  //2、挑选出当前目录下的所有以s开头的文件夹  File path3 = new File(".");  File[] files3 = path3.listFiles(new FileFilter(){  @Override  public boolean accept(File pathname) {  Pattern pattern = Pattern.compile("s.*");  return pathname.isDirectory()&&pattern.matcher(pathname.getName()).matches();  }  });  for(File f : files3){  System.out.println(f);  }  System.out.println("-----挑选出当前目录下的所有以.开头的文件夹,并且标明文件属性----");  //3、挑选出当前目录下以.开头的文件或文件夹,并且在其后部标明f/d标明其为文件或文件夹  File path4 = new File(".");  File[] files4 = path4.listFiles(new FilenameFilter(){  Pattern pattern = Pattern.compile("\\..*");  @Override  public boolean accept(File dir, String name) {  return pattern.matcher(name).matches();  }  });  for(File f : files4){  String sfd = (f.isFile()) ? "f" : "d";  System.out.println(f.getName() + "---->" + sfd);  }  }  
}  

执行结果如下:


 

----------------------------------------------下面是整个演示源代码----------------------------------------------

package com.lj95801.iosystem;  import java.io.File;  
import java.io.FileFilter;  
import java.io.FilenameFilter;  
import java.util.regex.Pattern;  import org.junit.Test;  public class tFile1 {  /* * File类的构造函数有以下几种: * 1)、File(File parent, String child); * 2)、File(String pathname)  * 3)、File(String parent, String child)  * 4)、File(URI uri)  */  @Test  public void test1(){  //1、new File(".")构建的是当前目录的路径  File path = new File(".");  String[] list = path.list();  for(String itemName : list){  System.out.println(itemName);  }  //2、new File("E:\\Java")利用绝对路径构建E盘下的Java目录路径  System.out.println("--------->");  path = new File("E:\\Java");  list = path.list();  for(String itemName : list){  System.out.println(itemName);  }  //3、new File(new File("."),"bin")表示当前目录下的bin目录  System.out.println("--------->");  path = new File(new File("."),"bin");  list = path.list();//列出bin目录下的所有文件或者是文件夹  for(String itemName : list){  System.out.println(itemName);  }  }  /* * list()方法 : 会返回一个字符数组,将制定路径下的文件或文件夹名(仅仅是个名字而已)存储到String数组中。有以下几种: * 1)、list() * 2)、list(FilenameFilter filter) *  * FilenameFilter filter是一个目录过滤器。list(FilenameFilter filter)方法会选择 * 符合条件的文件或文件夹。为了能理解这个函数的工作原理,下面列出了其源码: *   public String[] list(FilenameFilter filter) { String names[] = list(); if ((names == null) || (filter == null)) { return names; } ArrayList v = new ArrayList(); for (int i = 0 ; i < names.length ; i++) { if (filter.accept(this, names[i])) { v.add(names[i]); } } return (String[])(v.toArray(new String[v.size()])); } *我们再往前追踪一下,看看FilenameFilter到底是怎样的,同时其accept()方法又有什么作用: *   interface FilenameFilter { * * Tests if a specified file should be included in a file list. * * @param   dir    the directory in which the file was found. * @param   name   the name of the file. * @return  <code>true</code> if and only if the name should be * included in the file list; <code>false</code> otherwise. boolean accept(File dir, String name); } * *我们可以看到,FilenameFilter只是一个接口,所以如果要用list(FilenameFilter filter)方法 *我们必须要实现这样的一个接口。accept()方法会返回一个boolean类型的值,list()方法会根据这个返回值 *来决定是不是要将某个名字添加到返回列表中。所以,我们要在accept()方法中定义好挑选条件,这会用到正则表达式。 * */  //一、采用实现接口的方式  class FileNameFilter1 implements FilenameFilter{  private Pattern pattern;  public FileNameFilter1(String regex) {  pattern = Pattern.compile(regex);  }  @Override  public boolean accept(File dir, String name) {  boolean result = pattern.matcher(name).matches();  return result;  }  }  /* * 二、采用匿名内部类的方式。 * 不用implements的方式来实现接口,但是定义一个静态方法,此静态方法返回一个FilenameFilter对象, * 本来正常的语句是return new FilenameFilter();但是在语句结束之前我说“等一下,我要在这里定义 * 一个类,类的具体实现我用一个大括号括起来”。 */  static class FileNameFilter2{  public static FilenameFilter filter(final String regex){  return new FilenameFilter(){  private Pattern pattern = Pattern.compile(regex);  @Override  public boolean accept(File dir, String name) {  return pattern.matcher(name).matches();  }  };  }  }  @Test  public void test2(){  System.out.println("------挑选当前目录下以.开头的文件或文件夹-------");  //1、挑选当前目录下以.开头的文件或文件夹,并且打印出来(创建一个类来实现FilenameFilter接口)  File path = new File(".");  String[] nameList = path.list(new FileNameFilter1("\\..*"));  for(String itemName : nameList){  System.out.println(itemName);  }  System.out.println("------挑选当前目录下以b开头的文件或文件夹-------");  //2、挑选当前目录下以b开头的文件或文件夹,并且打印出来(使用匿名内部类的方式来实现)  File path2 = new File(".");  String[] nameList2 = path2.list(FileNameFilter2.filter("b.*"));  for(String itemName : nameList2){  System.out.println(itemName);  }  System.out.println("------挑选当前目录下以s开头的文件或文件夹-------");  //3、将匿名内部类利用到极致  File path3 = new File(".");  String[] nameList3 = path3.list(new FilenameFilter(){//其实是在第二种方式的基础上精简过来的。  private Pattern pattern = Pattern.compile("s.*");  @Override  public boolean accept(File dir, String name) {  return pattern.matcher(name).matches();  }  });  for(String itemName : nameList3){  System.out.println(itemName);  }  }  /* * list()和listFiles()方法的区别在于:list()返回的是一个String类型数组,它只是一个数组; * 而listFiles()方法返回的是一个File类的引用,它具有类的所有属性和方法。 *  * 下面的前三个方法返回File[]类型,第四个返回static File[]类型。 * 返回类型 : 该路径下所有文件或文件夹的绝对路径(pathname,注意File类型指的是路径,而不是文件) * listFiles() * listFiles(FileFilter filter) * listFiles(FilenameFilter filter) * listRoots() *  */  @Test  public void test3(){  System.out.println("-----判别当前目录下的文件是否为文件夹----");  //1、列出当前目录下的所有文件和文件夹,保存为File类对象的数组,判别其是否为文件夹  File path = new File(".");  File[] files = path.listFiles();  for(File f : files){  System.out.println(f + " ---> is a Directory? " + f.isDirectory());  }  System.out.println("-----挑选出当前目录下的所有文件夹----");  //2、挑选出当前目录下的所有文件夹  File path2 = new File(".");  File[] files2 = path2.listFiles(new FileFilter(){  @Override  public boolean accept(File pathname) {  return pathname.isDirectory();  }  });  for(File f : files2){  System.out.println(f);  }  System.out.println("-----挑选出当前目录下的所有以s开头的文件夹----");  //2、挑选出当前目录下的所有以s开头的文件夹  File path3 = new File(".");  File[] files3 = path3.listFiles(new FileFilter(){  @Override  public boolean accept(File pathname) {  Pattern pattern = Pattern.compile("s.*");  return pathname.isDirectory()&&pattern.matcher(pathname.getName()).matches();  }  });  for(File f : files3){  System.out.println(f);  }  System.out.println("-----挑选出当前目录下的所有以.开头的文件夹,并且标明文件属性----");  //3、挑选出当前目录下以.开头的文件或文件夹,并且在其后部标明f/d标明其为文件或文件夹  File path4 = new File(".");  File[] files4 = path4.listFiles(new FilenameFilter(){  Pattern pattern = Pattern.compile("\\..*");  @Override  public boolean accept(File dir, String name) {  return pattern.matcher(name).matches();  }  });  for(File f : files4){  String sfd = (f.isFile()) ? "f" : "d";  System.out.println(f.getName() + "---->" + sfd);  }  }  
}  

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动配置原理---SpringBoot

自动配置原理 配置文件到底能写什么&#xff1f;怎么写&#xff1f; SpringBoot官方文档中有大量的配置&#xff0c;我们无法全部记住 分析自动配置原理 我们以**HttpEncodingAutoConfiguration&#xff08;Http编码自动配置&#xff09;**为例解释自动配置原理&#xff1b;…

Docker 部署dotnetcore

安装docker 系统还是之前centos 7.1 https://www.docker.com/products/docker#/linux yum update 创建源: /etc/yum.repos.d/docker.repo tee /etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] nameDocker Repository baseurlhttps://yum.dockerproject.org/repo/main/…

虚拟机安装windows ghost版本系统记录完整过程

重点 1.磁盘一定要分成2个 2.直接安装第一个盘 就是进入CD后选1 自动安装 https://blog.csdn.net/hanzl1/article/details/79298787 虚拟机安装windows ghost版本系统记录完整过程 NO如果 2018-02-09 15:26:08 15193 收藏 5 分类专栏&#xff1a; windows 虚拟机 版权 …

linux下kill指令默认信号,Linux基础命令之kill命令

相信大家在使用Linux的过程中都会遇到过某个程序出错导致系统锁死的情况&#xff0c;按照常规的思维我们会通过重启来重新启动系统。然而事实上在Linux中并不需要进行重启就能够完成出错程序的关闭操作。在Linux中我们可以通过使用"kill"命令来强制终结它。那么到底它…

Supervisor 守护 dotnetcore 程序

环境准备 1.设置nginx 服务开机启动 systemctl enable nginx.servic 2.安装Supervisor yum install python-setuptools easy_install supervisor 3.配置Supervisor mkdir /etc/supervisorecho_supervisord_conf > /etc/supervisor/supervisord.conf#指定配置文件supervisord…

import javax.servlet.ServletRequest 关于IDEA javax.servlet.http.HttpServletRequest 不存在 解决方案

https://blog.csdn.net/a290450134/article/details/80964726 关于IDEA javax.servlet.http.HttpServletRequest; 不存在 解决方案 渊丹 2018-07-09 08:32:08 16576 收藏 8 分类专栏&#xff1a; 学习笔记 工具配置 版权 昨天从eclipse导入了一个web项目到idea&…

centos 7 部署 dotnetcore+Angular2 实践

1.准备 服务器: 腾讯云主机(Centos 7.1) http://www.qcloud.com/ 项目:aspnetcoreangular2开源项目模版 https://www.npmjs.com/package/generator-aspnetcore-angular2 该项目使用webpack 打包Angular2, 内网涉及到npm请使用tnpm 2.环境安装 (1)安装dotnetcore https://www.mi…

Python函数之计算规则图形的面积

来个直接的吧&#xff0c;看代码; #codingutf-8 from __future__ import unicode_literals import sys reload(sys) sys.setdefaultencoding(utf-8)#圆形 def yuan():rinput("请输入圆的半径:".decode(utf-8).encode(gbk))print 圆的面积是&#xff1a;,return 3.14*…

FinTech浪潮已到,五大金融场景将迎变革

FinTech是FinanceTechnology的缩写&#xff0c;可译为“金融科技”&#xff0c;与“互联网金融”一词相比&#xff0c;它更能突出科技的重要性。FinTech所带来的&#xff0c;不仅仅是升级金融领域的各种服务&#xff0c;而是一场革命&#xff0c;是金融领域的颠覆性未来。 FinT…

linux下q和q 的区别,linux命令中q、wq、q!的区别

Linux中没这个命令&#xff1b;只是在vi中有这个指令&#xff1b;q表示退出&#xff1b;w表示保存退出&#xff1b;q!表示强制退出。linux命令是对Linux系统进行管理的命令&#xff0c;对于Linux系统来说&#xff0c;无论是中央处理器、内存、磁盘驱动器、键盘、鼠标&#xff0…

spingmvc 通过xml配置redis jedispol 有密码 通过xml配置redis中的 jedispool(有密码)

https://blog.csdn.net/programmer_hard/article/details/103700334 通过xml配置redis中的 jedispool(有密码) programmer_hard 2019-12-25 15:55:16 209 收藏 分类专栏&#xff1a; java 版权 从git上拉了个项目一直报错, 看了下原因是因为redis一直没连接上. 于是看了下…

MVC自动配置原理---SpringBoot

MVC自动配置原理 官网阅读 在进行项目编写前&#xff0c;我们还需要知道一个东西&#xff0c;就是SpringBoot对我们的SpringMVC还做了哪些配置&#xff0c;包括如何扩展&#xff0c;如何定制。 只有把这些都搞清楚了&#xff0c;我们在之后使用才会更加得心应手。途径一&…

idea合并分支 idea git 合并分支

当前在dev上面 将dev_yjb合并到dev上面 idea git 合并分支 awesome_go 2018-07-12 16:22:20 50149 收藏 52 分类专栏&#xff1a; git idea git的使用&#xff08;四&#xff09;git建立分支与合并分支 作者&#xff1a;马育民 • 2017-11-10 17:05 • 阅读&#xff1a;10…

.NET Core New csproj 如何发布可执行文件

一、前言 .NET工具链在最新的Preview3版本中&#xff0c;引入了新的MSBuild项目系统&#xff0c;项目文件又回归了.csproj的XML文件来管理&#xff0c;项目文件、包引用、程序集引用、.NET Core工具集、发布内容定义等内容。本文主要将主要讨论&#xff0c;如何在新的项目系统中…

java.util.Stack类简介

转载自 java.util.Stack类简介 Stack是一个后进先出&#xff08;last in first out&#xff0c;LIFO&#xff09;的堆栈&#xff0c;在Vector类的基础上扩展5个方法而来 Deque&#xff08;双端队列&#xff09;比起Stack具有更好的完整性和一致性&#xff0c;应该被优先使用…

.NET Core 首例 Office 开源跨平台组件(NPOI Core)

前言 最近项目中&#xff0c;需要使用到 Excel 导出&#xff0c;找了一圈发现没有适用于 .NET Core的&#xff0c;不依赖Office和操作系统限制的 Office 组件&#xff0c;于是萌生了把 NPOI 适配并移植到 .NET Core 的想法。 NPOI 的介绍不多说了&#xff0c;不了解的可以看一下…

员工管理系统---SpringBoot

目录结构 全部代码 package com.kuang.config;import org.springframework.web.servlet.HandlerInterceptor;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;//拦截器 public class LoginHandlerInterceptor implements Hand…

深入Java集合系列之五:PriorityQueue

转载自 深入Java集合系列之五&#xff1a;PriorityQueue 前言 今天继续来分析一下PriorityQueue的源码实现&#xff0c;实际上在Java集合框架中&#xff0c;还有ArrayDeque&#xff08;一种双端队列&#xff09;&#xff0c;这里就来分析一下PriorityQueue的源码。PriorityQu…

抹掉所有内容和设置 连接到icloud时出错 iphone还原出厂设置

设置-》抹掉所有内容和设置 点击设置 在顶部输入框中 输入抹掉 2个子就可以找到 1&#xff0c;点通用&#xff0c;存储用量&#xff0c;如果icloud为不可用&#xff0c; 设置--蜂窝数据-网络为无线网和蜂窝数据&#xff0c;成功的点个赞吧~&#xff01;&#xff08;这个过…