精华内容
下载资源
问答
  • java文件过滤器

    2019-04-26 11:47:49
    在File类的 list()方法中可以接收一个 FilenameFilter 参数(Filter译:过滤),通过该参数可以只列出符合条件的文件。这里的FilenameFilter 接口 和 javax.swing.filechooser 包下的 FileFilter 抽象类的功能非常相似,...

    在File类的 list()方法中可以接收一个 FilenameFilter 参数(Filter译:过滤),通过该参数可以只列出符合条件的文件。这里的FilenameFilter 接口 和 javax.swing.filechooser 包下的 FileFilter 抽象类的功能非常相似,可以把 FileFilter 当成 FilenameFilter 的实现类,(实际并不是它实现类)

    • FilenameFilter 接口里包含了一个 accept(File dir, String name)方法该方法将依次对指定 File 的所有子目录或者文件进行迭代;如果该方法返回true,则 list() 方法会列出该子目录或者文件。
    • boolean accept(File dir, String name)
    • 该方法测试指定文件是否包含在文件列表中。
    • dir - 找到该文件的目录。
    • name - 文件的名称。 (包括目录)
    • true 当该名称包含在文件列表中时; false否则。 (名称包含目录,和文件)
    • . 点代表当前根目录
    public static void main(String[] args) {
    
    		File file = new File(".");
    
    		// 使用 Lambda 表达式(目标类型为 FilenameFilter)
    		// 如果文件名以.java 结尾,或该文件是一个目录(文件夹)
    		String d;
    		String[] nameList = file.list((dir, name) -> name.endsWith(".java") 
    		|| new File(name).isDirectory());
    		for (String name : nameList) {
    			System.out.println(name);
    		}
    	}
    
    • 先附上我当前根目录图片
      在这里插入图片描述
    • 对应结果:
    .settings
    bin
    src
    文件.java
    目录.java
    
    
    • accept() 方法就是指定自己的规则
    • 我指定的是 只有是目录 或 (目录,文件) 以.java 为后缀都符合
    • 关于lambda表达式可点击参考 -《Lambda
    展开全文
  • import java.io.File; public class FileNameTest { public static void main(String[] args) { File file = new File("."); String[] nameList = file.list((dir, name) -> name.endsWith(".java")||new File...
  • java 文件过滤器的6种实现方法

    千次阅读 2014-07-10 16:05:32
    注:运行环境 ... * 条件:java中有一个FilenameFilter的接口,能够过滤得到指定类型的文件或者目录,其中必须重写accept(File file,String path)方法  */ import java.io.File; import ja

    注:运行环境 IDEA

    package fileTest;

    /**
     * Created by peipei.zhou on 14-7-10.
     * 条件:java中有一个FilenameFilter的接口,能够过滤得到指定类型的文件或者目录,其中必须重写accept(File file,String path)方法
     */
    import java.io.File;
    import java.io.FileFilter;
    import java.io.FilenameFilter;
    import java.util.regex.Pattern;
    import java.util.regex.*;
    import java.io.*;
    import java.util.*;


    public class fileTest {

        public static FilenameFilter filter(final String regex) {
            // Creation of anonymous inner class:
            return new FilenameFilter() {
                private Pattern pattern = Pattern.compile(regex);
                public boolean accept(File dir, String name) {
                    return pattern.matcher(name).matches();
                }
            }; // End of anonymous inner class
        }

        public static void main(String[] args)
        {
            File dir = new File("d:/tmp/");
            //方法一:
            String[] files = dir.list(new MyFilenameFilter());//调用过滤器,自动调用accept()方法
            if (files != null)
            {
                for (int i = 0; i < files.length; i++)
                {
                    System.out.println(files[i]);//仅仅输出.sh文件
                }
            }
            //方法二:内部类实现过滤器
            String[] files2 = dir.list(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    return name.endsWith("sh");//或者name.indexOf(".sh")!=-1;
                }
            } );//调用过滤器,自动调用accept()方法
            if (files2!=null)
            {
                for (int i = 0; i < files2.length; i++)
                {
                    System.out.println(files2[i]);//仅仅输出.sh文件
                }
            }
            //方法三:更通用的写法
            //列出所有.java文件
            String[] files3 = dir.list(new  FileNameSelector("sh"));//调用过滤器,自动调用accept()方法
            //File[] files = dir.listFiles(new MyFileFilter());
            if (files3!=null)
            {
                for (int i = 0; i < files3.length; i++)
                {
                    System.out.println(files3[i]);//仅仅输出.sh文件
                }
            }
            //方法四:更通用的方法,注意与方法三中定义的过滤器的区别
             try{

                 String[] files4 = dir.list(new DirFilter(".sh"));//调用过滤器,自动调用accept()方法
                 //File[] files = dir.listFiles(new MyFileFilter());
                 if (files4!=null)
                 {
                     for (int i = 0; i < files4.length; i++)
                     {
                         System.out.println(files4[i]);//仅仅输出.sh文件
                     }
                 }
             }catch(Exception e){

                e.printStackTrace();

                }
            //方法五:正则表达式
            String[] files5 = dir.list(new DirFiles(".*[.sh]"));//调用过滤器,自动调用accept()方法
            //File[] files = dir.listFiles(new MyFileFilter());
            if (files5!=null)
            {
                for (int i = 0; i < files5.length; i++)
                {
                    System.out.println(files5[i]);//仅仅输出.sh文件
                }
            }
            //方法六:正则表达式+匿名类
            String[] files6 = dir.list(filter(".*[.sh]"));//调用过滤器,自动调用accept()方法

            if (files6!=null)
            {
                for (int i = 0; i < files6.length; i++)
                {
                    System.out.println(files6[i]);//仅仅输出.sh文件
                }
            }

        }

    }


    class MyFilenameFilter implements FilenameFilter
    {


        public boolean accept(File dir, String name)
        {
            //System.out.println(dir.getAbsolutePath());
           // System.out.println(name);
            return name.indexOf(".sh")!=-1;
        }
    }

     class FileNameSelector implements FilenameFilter
    {
        String extension = ".";
        public FileNameSelector(String fileExtensionNoDot)
        {
            extension += fileExtensionNoDot;
        }
        @Override
        public boolean accept(File dir, String name)
        {
            return name.endsWith(extension);
        }
    }
     class DirFilter implements FilenameFilter{

       private String type;

       public DirFilter(String tp){

            this.type=tp;

          }

      public  boolean accept(File fl,String path) {

            File file=new File(path);

            String filename=file.getName();

            return filename.indexOf(type)!=-1;

         }
    }
    class DirFiles implements FilenameFilter{
        private Pattern pattern;
        public DirFiles(String regex)
        {
            pattern = Pattern.compile(regex);
        }
        public boolean accept(File dir, String name)
        {
            return pattern.matcher(name).matches();
        }
    }


    展开全文
  • 有时候需要在程序中查找某一目录下的某一类文件,例如需要在E:\data\file_selector_test 目录下面查找所有已.java为后缀名的文件。其实这个功能自己也可以实现,很简单,只需要遍历一下目录下的所有文件,判断一下...

    有时候需要在程序中查找某一目录下的某一类文件,例如需要在E:\data\file_selector_test 目录下面查找所有已.java为后缀名的文件。其实这个功能自己也可以实现,很简单,只需要遍历一下目录下的所有文件,判断一下文件名称的结尾字符串是否为".java"即可。虽然这么做可以实现,但是没有必要,java api中已经有相关的方法来实现这一功能。

    File类有一个listFiles(FileNameFilter filter).只需要实现一个简单的filter就可以做到。例如我要在E:\data\file_selector_test 目录下面查找以.java 或者.txt结尾的文件,我可以这么做。见下例。

    类名:FileNameSelector
     
    import java.io.File;
        import java.io.FilenameFilter;
    
    public class FileNameSelector implements FilenameFilter
    {
     String extension = ".";
     public FileNameSelector(String fileExtensionNoDot)
     {
      extension += fileExtensionNoDot;
     }
     @Override
     public boolean accept(File dir, String name)
     {
      return name.endsWith(extension);
     }
     public static void main(String[] args)
     {
      File directory = new File("E:\\data\\file_selector_test");
      //列出所有文件
      File[] files = directory.listFiles();
      System.out.println("\n目录"+directory.getName()+"下的所有文件");
      for(File file : files)
      {
       System.out.print("  " + file.getName());
      }
      //列出所有.txt文件
      File[] txtFiles = directory.listFiles(new FileNameSelector("txt"));
      System.out.println("\n目录"+directory.getName()+"下的.txt文件");
      for(File file : txtFiles)
      {
       System.out.print("  " + file.getName());
      }
      
      //列出所有.java文件
      File[] javaFiles = directory.listFiles(new FileNameSelector("java"));
      System.out.println("\n目录"+directory.getName()+"下的.java文件");
      for(File file : javaFiles)
      {
       System.out.print("  " + file.getName());
      }
     }
    }

     原地址:http://blog.sina.com.cn/s/blog_7a27a9bf0100s887.html
    展开全文
  • java过滤器Filter

    万次阅读 多人点赞 2019-07-31 19:08:31
    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它...

    一、简介

    Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码、做一些业务逻辑判断如是否有权限访问页面等。其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应 (Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面等等工作。它是随你的 web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁,以下通过代码示例来了解它 的使用。

    二、实例

    package test.filter; 
    import ...; 
    /**
     * 介绍过滤器的使用,以设置编码为例
     */
    public class MyFilter implements Filter { 
      private FilterConfig config = null; 
      private boolean isFilter = false;
      
      public void destroy() { 
       System.out.println("MyFilter准备销毁..."); 
      } 
      
      public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain chain) throws IOException, ServletException { 
       // 强制类型转换 
       HttpServletRequest request = (HttpServletRequest)arg0; 
       HttpServletResponse response = (HttpServletResponse)arg1; 
       // 获取web.xm设置的编码集,设置到Request、Response 中   
       request.setCharacterEncoding(config.getInitParameter("charset"));   
       response.setContentType(config.getInitParameter("contentType"));   
       response.setCharacterEncoding(config.getInitParameter("charset"));   
       // 将请求转发到目的地继续执行
       chain.doFilter(request, response);
      } 
      
      public void init(FilterConfig arg0) throws ServletException { 
       this.config = arg0; 
       if(isFilter){
          System.out.println("MyFilter初始化..."); 
       }
      } 
      
      private void setIsFilter(boolean isFilter){
    	this.isFilter = isFilter;
      }
    }

    然后在web. xml中配置该过滤器:

     <filter>
     	<filter-name>MyFilter</filter-name>
     	<filter-class>test.filter.MyFilter</filter-class>
     	<init-param>
     		<param-name>isFilter</param-name>
     		<param-value>true</param-value>
     	</init-param>
     </filter>
     <filter-mapping>
     	<filter-name>MyFilter</filter-name>
     	<url-pattern>/*</url-pattern>
     	<dispatcher>REQUEST</dispatcher> <!-- 没有配置dispatcher就是默认request方式的 -->
     	<dispatcher>FORWARD</dispatcher>
     	<dispatcher>ERROR</dispatcher>
     	<dispatcher>INCLUDE</dispatcher>
     </filt

    三、详细介绍

    在doFilter方法中通常都做些什么呢,下面列举一下:

    1、通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。

    比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。
    2、在调用chain.doFilter方法之前,做些处理来达到某些目的。
    比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。
    3、在调用chain.doFilter方法之后,做些处理来达到某些目的。
    比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。

    Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。

    filter-mapping标签中dispatcher指定过滤器所拦截的资源被Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher> 子元素用来指定 Filter 对资源的多种调用方式进行拦截。

    REQUEST:

    当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。

    INCLUDE:

    如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。

    FORWARD:

    如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。

    ERROR:

    如若在A.jsp页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。

    四、高级配置(允许代理注入spring bean)

    web.xml中配置过滤器DelegatingFilterProxy:

     

    <filter>
        <filter-name>permission</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>targetFilterLifecycle</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
     <filter-mapping>
        <filter-name>permission</filter-name>
        <url-pattern>*.htm</url-pattern>
    </filter-mapping>

    在spring bean配置中加入:

    <bean id="permission" class="你的bean"></bean>

    bean的id必须和filter-name一样。如果想不一样,可以这样配置:

    <filter>
        <filter-name>permission</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
         <init-param>
            <param-name>targetFilterLifecycle</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>targetBeanName</param-name>
            <param-value>test</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>permission</filter-name>
        <url-pattern>*.htm</url-pattern>
    </filter-mapping>

    在spring bean配置中加入:

    <bean id="test" class="你的bean"></bean>

    以上你的spring bean必须实现Filter接口。

    那这样子做是为了什么呢?

    答:这样做就可以将DelegatingFilterProxy所代理的filter作为spring的bean,受到spring的管理,也就是通过Spring容器来管理filter的生命周期,还有就是如果filter中需要一些Spring容器的实例,可以通过spring直接注入,另外读取一些配置文件这些便利的操作都可以通过Spring来配置实现。

    其中如果设置"targetFilterLifecycle"为True,则Filter.init()和Filter.destroy()有效;若为false,则这两个方法失效。

    如果大家有用到shiro(一个强大且易用的Java安全框架,执行身份验证、授权、密码学和会话管理等)的话,通常就会用到这个DelegatingFilterProxy了!

     

    展开全文
  • Java 文件过滤 FileFilter

    千次阅读 2018-01-21 16:47:30
    Java 文件过滤 FileFilter http://blog.csdn.net/xiangyong2008/article/details/5899740 1.写一个类继承与FileFilter [java] view plain copy package com.dream.musicplayer;...
  • Java重写文件过滤器

    千次阅读 2015-01-02 17:58:17
    Java中如果要在JFileChooser里添加文件过滤器,必须继承FileFilter抽象类,并实现其方法。import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.filechooser.FileFilter; ...
  • Java中File文件类之文件过滤器

    千次阅读 2018-01-30 20:47:29
    文件过滤器文件过滤器是个接口过滤器一:File[] listFiles(FileFilter filter) public static void fun1() { // 测试过滤器(FileFilter) File file = new File("/Users/lanou/Desktop/level"); // 使用重载 的 ...
  • Java文件过滤

    千次阅读 2015-04-17 10:15:42
    Java实现文件过滤的方法,比如我只想获得某个路径下.java文件 只需要实现FilenameFilter这个接口即可。 比如: private class FileFilter implements FilenameFilter { public boolean accept(File dir, ...
  • Java——listFiles方法支持文件过滤器

    千次阅读 2019-03-06 11:05:20
    * listFiles方法支持文件过滤器 * * FileFilter接口 * 实现该接口需要实现抽象方法 * boolean accept(File f) * 该方法要求我们定义过滤条件 * * listFiles方法会将当前目录下满足ac...
  • java文件过滤使用过滤器FileFilter,在accept方法写过滤条件. 很简单直接代码:  package com.lin.run; import java.io.File; import java.io.FileFilter; public class MyTest { public static void main...
  • java文件及文件夹过滤器使用样例

    千次阅读 2016-12-04 22:20:02
    //内容一:文件过滤器(判断文件是否可读过滤) import java.io.File; import java.io.FileFilter; public class MyFileFilter implements FileFilter { @Override public boolean accept(File pathname) { // TODO ...
  • 本博客的目的性很强,就是奔着怎么使用java中JFileChooser文件选择来的,那么很多内部原理性的东西就不过于赘述了,直接以例子出发,帮助大家理解怎么使用它 定义一个常量用于保存文件目录 创建一个方法用于封装...
  • java JFileChooser与 文件过滤器FileFilter

    千次阅读 2013-12-22 13:26:53
    JfileChooser使用中可以用addChoosableFileFilter()方法来实现文件过滤。 public void addChoosableFileFilter(FileFilter filter); FileFilter 是一个抽象类,JFileChooser 使用它过滤显示给用户的文件集合。 ...
  • java--FilenameFilter文件过滤器

    千次阅读 2011-11-18 18:22:56
    作者:莴笋炒肉 ...java--FilenameFilter文件过滤器 java中有一个FilenameFilter的接口,能够过滤得到指定类型的文件或者目录,其中必须重写accept(File file,String path)方法 publ
  • 文件过滤器 FileFilter

    2014-11-28 09:32:00
    java文件过滤器,过滤任意类型的文件,下面以过滤.mp3和.lrc文件为例: 1、定义一个文件过滤器实现FileFilter 接口(MP3FileFilter.java) package com.demo.file; import java.io.File; import java.io....
  • JAVA布隆过滤器的使用BloomFilter

    千次阅读 2019-06-28 11:32:01
    JAVA布隆过滤器的使用BloomFilter需求:对于一些url的去重若果量大的话使用redis会卡顿的,使用缓存还要考虑持久化,系统一关就没了.于是就百度了一下布隆过滤器刚刚好,处理上亿数据也很快,站内存也小.用法:1.自己实现...
  • java web过滤器 处理乱码

    千次阅读 2016-11-16 21:02:29
    //读取过滤器配置文件 private FilterConfig config; public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain...
  • 昨天还好好的一个页面,添加Filter后所有...web.xml中添加了过滤器如下:    SSOFilter  com.adcc.aerops.utils.SSOFilter    param1  value        SSOFilter  /*   对应CLASS的doFilt
  • java 文件选择过滤

    千次阅读 2014-11-22 16:35:16
    当使用java开发桌面应用程序的时候免不了要使用本地文件
  • init方法也只会执行一次 也就是程序刚刚启动的时候 filter就被加载了 这个时候配置文件还没有被加载到呢 具体操作如下: 在filter的init中用上下文对象来获取 private String testUrl; @Override public void init...
  • java过滤器不起作用的原因

    千次阅读 2016-03-18 10:25:58
    导致过滤器不起作用的原因,目前我碰到的有两种:一个是过滤器的顺序问题,一个是过滤文件类型。   先说说过滤器的顺序问题。 在项目里面,要是用SSH框架的话,web.xml文件中除了自己写的过滤器以外,还会有...
  • Java使用过滤器防止SQL注入XSS脚本注入

    千次阅读 多人点赞 2020-12-17 20:29:45
    前几天有个客户在系统上面写... 一. 定义过滤器 package com.cn.unit.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; im
  • FileFilter 文件过滤器

    千次阅读 2019-10-27 10:23:19
    返回一个抽象路径名数组,表示由此抽象路径名表示的满足指定过滤器的目录中的文件和目录。 创建实现类实现FileFilter接口 java.io Interface FileFilter抽象路径名的过滤器。 boolean accept(File pathname) 测试...
  • Java过滤器

    万次阅读 多人点赞 2012-03-06 18:50:15
    过滤器就是在源数据和目的数据之间起过滤作用的中间件。  Web应用中,在处理请求时,经常有一些公共的工作,比如设置字符集。这样的工作需要写在每个页面,... 开发一个过滤器必须实现Java定义好的javax.servlet.F
  • java servlet过滤器简解及实例

    千次阅读 2016-07-20 14:34:08
     Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的...
  • 文件过滤器FileFilter

    千次阅读 2017-09-05 21:12:19
    接口 FileFilter public interface FileFilter用于抽象路径名的过滤器。 此接口的实例可传递给 File 类的 listFiles(FileFilter) 方法。 方法摘要 ... 文件过滤器 建议用 匿名内部类方法来操作,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 238,354
精华内容 95,341
关键字:

java文件过滤器

java 订阅