文件过滤器
Ⅰ java FileFilter 过滤只保留文件夹和.xls文件
代码如下,供参考
import java.io.File;
import java.io.FileFilter;
public class Test {
public static void main(String[] args) {
File file = new File("E:\");
File[] files = file.listFiles(new FileFilter(){
@Override
public boolean accept(File pathname) {
// 判断文件名是目录 或 .xls 结尾
if (pathname.isDirectory() || pathname.getName().toUpperCase().endsWith(".XLS")) {
return true;
}
return false;
}});
for (File f : files) {
System.out.println(f.getName());
}
}
}
Ⅱ java项目和web项目中的过滤器文件怎么使用
过滤器是一个程序,它先于与之相关的servlet或JSP页面运行在服务器上。过滤器可附加到一个或多个servlet或JSP页面上,并且可以检查进入这些资源的请求信息。在这之后,过滤器可以作如下的选择:
1. 以常规的方式调用资源(即,调用servlet或JSP页面)。
2.利用修改过的请求信息调用资源。
3. 调用资源,但在发送响应到客户机前对其进行修改
4. 阻止该资源调用,代之以转到其他的资源,返回一个特定的状态代码或生成替换输出。
1. 建立基本过滤器
建立一个过滤器涉及下列五个步骤:
1)建立一个实现Filter接口的类。这个类需要三个方法,分别是:doFilter、init和destroy。
doFilter方法包含主要的过滤代码(见第2步),init方法建立设置操作,而destroy方法进行清楚。
2)在doFilter方法中放入过滤行为。doFilter方法的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。最后一个参数为FilterChain,如下一步所述,此参数用来调用servlet或JSP页。
3)调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
4)对相应的servlet和JSP页面注册过滤器。在部署描述符文件(web.xml)中使用filter和filter-mapping元素。
5)禁用激活器servlet。防止用户利用缺省servlet URL绕过过滤器设置。
1.1 建立一个实现Filter接口的类
所有过滤器都必须实现javax.servlet.Filter。这个接口包含三个方法,分别为doFilter、init和destroy。
public void doFilter(ServletRequset request,
ServletResponse response,
FilterChain chain)
thows ServletException, IOException
每当调用一个过滤器(即,每次请求与此过滤器相关的servlet或JSP页面)时,就执行其doFilter方法。正是这个方法包含了大部分过滤逻辑。第一个参数为与传入请求有关的ServletRequest。对于简单的过滤器,大多数过滤逻辑是基于这个对象的。如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此对象构造成HttpServletRequest。
第二个参数为ServletResponse。除了在两个情形下要使用它以外,通常忽略这个参数。首先,如果希望完全阻塞对相关servlet或JSP页面的访问。可调用response.getWriter并直接发送一个响应到客户机。其次,如果希望修改相关的servlet或JSP页面的输出,可把响应包含在一个收集所有发送到它的输出的对象中。然后,在调用serlvet或JSP页面后,过滤器可检查输出,如果合适就修改它,之后发送到客户机。
DoFilter的最后一个参数为FilterChain对象。对此对象调用doFilter以激活与servlet或JSP页面相关的下一个过滤器。如果没有另一个相关的过滤器,则对doFilter的调用激活servlet或JSP本身。
public void init(FilterConfig config) thows ServletException
init方法只在此过滤器第一次初始化时执行,不是每次调用过滤器都执行它。对于简单的过滤器,可提供此方法的一个空体,但有两个原因需要使用init。首先,FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。因此,普遍的办法是利用init将FilterConfig对象存放在一个字段中,以便doFilter方法能够访问servlet环境或过滤器名.其次,FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。
public void destroy( )
大多数过滤器简单地为此方法提供一个空体,不过,可利用它来完成诸如关闭过滤器使用的文件或数据库连接池等清除任务。
1.2 将过滤行为放入doFilter方法
doFilter方法为大多数过滤器地关键部分。每当调用一个过滤器时,都要执行doFilter。对于大多数过滤器来说,doFilter执行的步骤是基于传入的信息的。因此,可能要利用作为doFilter的第一个参数提供的ServletRequest。这个对象常常构造为HttpServletRequest类型,以提供对该类的更特殊方法的访问。
1.3 调用FilterChain对象的doFilter方法
Filter接口的doFilter方法以一个FilterChain对象作为它的第三个参数。在调用该对象的doFilter方法时,激活下一个相关的过滤器。这个过程一般持续到链中最后一个过滤器为止。在最后一个过滤器调用其FilterChain对象的doFilter方法时,激活servlet或页面自身。
但是,链中的任意过滤器都可以通过不调用其FilterChain的doFilter方法中断这个过程。在这样的情况下,不再调用JSP页面的serlvet,并且中断此调用过程的过滤器负责将输出提供给客户机。
1.4 对适当的servlet和JSP页面注册过滤器
部署描述符文件的2.3版本引入了两个用于过滤器的元素,分别是:filter和filter-mapping。filter元素向系统注册一个过滤对象,filter-mapping元素指定该过滤对象所应用的URL。
下面是一个完整的例子:
//建立一个实现Filter接口的类。这个类需要三个方法,分别是:doFilter、init和destroy。
//doFilter方法包含主要的过滤代码,init方法建立设置操作,而destroy方法进行清
package filterpkg;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class testFilter implements Filter{
public void init(FilterConfig filterConfig) throws ServletException
{
}
//在doFilter方法中放入过滤行为。doFilter方法的第一个参数为ServletRequest对象。
//此对象给过滤器提供了对进入的信息(包括表单数据、cookie和HTTP请求头)的完全访问。
//第二个参数为ServletResponse,通常在简单的过滤器中忽略此参数。
//最后一个参数为FilterChain,如下一步所述,此参数用来调用servlet或JSP页。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain)
{
PrintWriter wout=null;
try
{
wout=response.getWriter();
}
catch(IOException e)
{
}
HttpServletRequest req=(HttpServletRequest)request;//将request转化为它的子类HttpServletRequest
String uri=req.getRequestURI();//获得传入的URI
if (uri.indexOf("MyJsp.jsp")>0 ||uri.indexOf("MainForm.do")>0 )//如果是我们指定的登录页面或验证页面
{
try
{
//调用FilterChain对象的doFilter方法。Filter接口的doFilter方法取一个FilterChain对象作为它的一个参数。
//在调用此对象的doFilter方法时,激活下一个相关的过滤器。如果没有另一个过滤器与servlet或JSP页面关联,则servlet或JSP页面被激活。
filterChain.doFilter(request, response);
}
catch(Exception e)
{
}
return;
}
if (req.getSession()!=null)
if (req.getSession().getAttribute("USERID")==null)
{
wout.write("<HTML><BODY> Check error! <br/> </BODY> </HTML>");
wout.flush();
return;
}
try
{
filterChain.doFilter(request, response);
}
catch(Exception e)
{
}
}
public void destroy()
{
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<filter>
<filter-name>CHECKCODE</filter-name>
<filter-class>filterpkg.testFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CHECKCODE</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<description>This is the description of my J2EE component</description>
<display-name>This is the display name of my J2EE component</display-name>
<servlet-name>ControlServlet</servlet-name>
<servlet-class>filterpkg.ControlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ControlServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
Ⅲ Java中的文件过滤器是怎么添加的
FileFilter filter = new FileNameExtensionFilter("文本文件", "txt");
JFileChooser fileChooser = ...;
fileChooser.addChoosableFileFilter(filter);
Ⅳ java 文件过滤器怎么实现。
import java.io.File;
import java.io.FilenameFilter;
/**
* 文件过滤器的简单实现
*
* @ ajaxfan
* @date 2010-04-17
*/
public class FileNameFilterDemo {
public static void main(String[] args) {
list("d:/");
}
/**
* 列出特定路径下的txt文件
*
* @param directoryName
* 路径名
*/
private static void list(String directoryName) {
File dir = new File(directoryName);
// 确定该路径指向一个目录
if (dir.exists() && dir.isDirectory()) {
// 列出所有结尾为txt的文件
File[] files = dir.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith("txt");
}
});
System.out.println(java.util.Arrays.toString(files));
}
}
}
Ⅳ MFC的文件对话框过滤器怎么设置
CFileDialog::CFileDialog
CFileDialog(BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL
);
参数: bOpenFileDialg 如果为TRUE, 则创建文件打开对话框;如果为FALSE,则构造一个File Save As(另存为)对话框。
lpszDefExt 缺省文件扩展名,如果用户在文件名编辑框中不包含扩展名,则lpszDefExt定义的扩展名自动加到文件名后。如果为NULL,则不添加扩展名。
lpszFileName 初始显示于文件名编辑框中的文件名,如果为NULL,则不显示初始文件名。
dwFlags 一个或多个标志的组合,使你可定制对话框。要了解这些标志的描述,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。如果你改变m_ofn.Flags结构成员,在改变中用OR操作保持缺省行为完整。
lpszFilter 一列字符串对,指定可以应用到文件的过滤器。如果指定过滤器,仅被选择的文件显示于文件列表框中。请参阅说明部分,了解如何使用过滤器。
pParentWnd 指向文件对话框对象的父窗口或拥有者窗口。
说明:
调用此成员函数构造一个标准Windows文件对话框对象,或构造一个打开对话框或构造一个存盘对话框,根据bOpenFileDialog的值决定。
OFN_ALLOWMULTISELECT标志。你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal之前进行此操作。另外,必须用m_ofn.lpstrFile指向的缓冲区字节数来设置m_ofn.nMaxFile。
为使用户用鼠标或键盘改变一个Explorer风格对话框的大小,设置OFN_ENABLESIZING标志,这仅当你提供一个钩子进程或定制模板时才有必要设置。此标志仅与一个Explorer风格的对话框一起工作,旧风格的对话框不可改变大小。
lpszFilter参数用于判断文件名类型及文件列表框中哪些可被显示。双字符串的第一个字符串描述过滤器,第二个串表明使用的文件扩展名,多重扩展可用“;”来指定。字符串由两个“|”字符结尾,最后是一个NULL。也可使用CString对象作为参数。
例如,Mirosoft Excel 允许用户用.XLC扩展名(表)或.XLS(工作表)打开文件,Excel过滤器应如下:
static char BASED_CODE szFilter[] =
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";
Ⅵ 用C++编写一个文本过滤器
|文||static WCHAR szFilter[]=L"可执行文件(*.exe)|*.exe|文本文件(*.txt)|*.txt|Word文档(.doc)|*.doc||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,szFilter);
假设你用ListCtrl控件,就用下面的代码实现版
if(dlg.DoModal()==IDOK)
{
权this->PathList.ResetContent();
POSITION pos=dlg.GetStartPosition();
while(pos)
{
this->PathList.AddString(dlg.GetNextPathName(pos));
}
}
Ⅶ Beyond Compare 设置文件过滤器
在使用Beyond Compare软件进行文件夹比较时,您可以指定您想要包括或者排除回的文件类型。例如,如果您答要比较某个文件夹,你可以选择包括文件类型如 *.pas、 *.dfm 和 *.dpr。但是,您也可以通过设置排除文件类型,选择比较文件夹只包含除 *.dcu 以外的所有文件。
您可以使用文件过滤器工具栏,去编辑指定一个简单的“包括这些类型”过滤器。输入用分号分隔的文件类型,或使用下拉列表从预设选择,其中文件前包括一个减号(-)将的被排除。
除了这些简单的通配符过滤器,您可以指定更复杂的过滤器,可以自定义包含或排除文件或文件夹的名字。单击“过滤”按钮,打开文件夹比较—会话设置对话框,切换到“名称过滤器”选项卡,选择需要包含或者排除的文件或文件夹,单击“添加到预设”按钮,即可自定义过滤文件类型。
文件过滤器可以过滤基于他们修改日期、大小、文件属性或文本内容的文件。在文件夹比较--会话设置对话框中,切换到其他过滤器选项卡。单击“+”按钮,选择排除文件类型。单击确定,即可完成过滤设置。
Ⅷ java 文件过滤器为什么报空指针异常求详解!!!
accept函数你用的不对,它只需要你指定过滤条件就可以了,不需要递归调用.
如果你需要其子目录下的.png文件,可以另外写一个递归调用.
完整的文件过滤的Java程序如下
importjava.io.File;
importjava.io.FilenameFilter;
{
@Override
publicbooleanaccept(Filedir,Stringname){
if(name.toLowerCase().endsWith(".png"))returntrue;
returnfalse;
}
}
publicclassFileDemo6_1{
staticvoidfindFile(Filedir){
if(dir.isDirectory()){
File[]fs1=dir.listFiles(newMyFilenameFilter1());
for(Filefile2:fs1){
System.out.println(file2);
}
File[]fs=dir.listFiles();
for(Filefile:fs){
findFile(file);
}
}
}
publicstaticvoidmain(String[]args){
findFile(newFile("C:/tmp/6"));
}
}
运行结果
C: mp6female.png
C: mp6male.png
C: mp6imagefemale.png
Ⅸ ISO文件卷过滤器是什么,有什么用
关于“ISO文件卷过滤器”的说明:
1)ISO文件卷过滤器的作用只是去掉尾部的空白数据而已。
2)有些光盘加密程序会在尾部隐藏加密信息,这些信息位于ISO文件卷之外,因此启用“ISO文件卷过滤器”会出现问题。这时切忌启用“ISO文件过滤器”。否则无法正常制作镜像,或制作的镜像可能无法使用。这也是UltraISO单独设置这个选项的道理。
3)几乎所有刻录软件在将ISO镜像刻录到CD-R上时会添加空白数据(Padding Blocks),目的是提高光盘的访问性能。否则有些老光驱在定位最外边的扇区时可能有问题。
4)Windows资源管理器通过ISO文件卷的目录信息,直接访问文件数据。尾部的空白数据不会对光盘的使用造成任何影响。
5)因此几乎所有的镜像制作软件,包括Nero,CloneCD,Alcohol 102%均采用“忠实原盘”的方式制作ISO。这样既不影响使用,也不会遗漏任何有用数据。
6)UltraISO的“ISO文件卷过滤器”对使用MD5校验有所帮助。如果ISO文件为标准数据镜像,可以用WinMD5软件提取MD5校验码;刻录 后,用UltraISO+ISO过滤器可制作大小相同的镜像,方便进行MD5校验。不过这种方法比较繁琐。建议用UltraISO的"检查CD/DVD光 盘"功能,先计算ISO的MD5码,然后直接计算光盘的MD5码,可直接比较。在此项功能,ISO过滤器缺省打开,因此不会包含光盘尾部的空白扇区。
关于UltraISO提供“ISO文件卷过滤器”的好处:
1)在制作镜像文件时采用“忠实原盘”的方式,同时提供“ISO文件卷过滤器”选项。
一般情况下,不启用“ISO文件卷过滤器”,确保制作的镜像不会丢失重要信息。
如果是标准数据光盘,启用“ISO文件卷过滤器”,可得到大小与原ISO一样的镜像文件,便于检查。
2)在检查光盘/ISO文件时,自动启用“ISO文件卷过滤器”,从而避免因刻录软件添加Padding Blocks而造成的差异。
Ⅹ java中Filefilter和Filenamefilter的区别
两种机制而已,筛选时的参数不同,很多类库都会提供多种调用方式,并无不同,只是适配更多的情况
FileFilter filefilter = new FileFilter() {
public boolean accept(File file) {
//if the file extension is .txt return true, else false
if (file.getName().endsWith(".txt")) {
return true;
}
return false;
}
};
FilenameFilter filefilter = new FilenameFilter() {
public boolean accept(File dir, String name) {
//if the file extension is .txt return true, else false
return name.endsWith(".txt");
}
};
看到了吧,是接口里方法的参数类型不同,这样你可以选自己需要的接口