L/O/G/O第10章文件操作褚龙现chulongxian@126.com软件学院回顾--EL基本语法一个EL元素必须以${开始,以}结束。它可以直接出现在模板文本中,也可以出现在JSP标记的属性中,如:姓名:${expression1}地址:${expression2}jsp:includepage=“${expression3}”/软件学院回顾--EL与JavaBean使用EL简化JavaBean的属性操作如原来的:jsp:getPropertyname=myBeanproperty=name/或%=myBean.getName()%现在可以简化成:${myBean.name}另外可以使用EL实现对属性的嵌套访问:如:${person.address.phoneNumbers[1].number}软件学院回顾--EL与属性操作在EL中访问某变量可以使用如下的方式:${变量名}如果没有指定变量的有效范围;JSP容器会首先从页内有效范围查找,如果找到,返回相应的值;否则,EL会依次到请求有效、会话有效和应用有效范围中查找对应的变量,找到了,就返回相应的值。如果最终也没有找到,则返回null。也可在变量名前直接指定范围,只在指定的范围内查找变量,如只在会话有效范围内查找变量userName的语句为:${sessionScope.userName}软件学院回顾--EL与属性操作对属性对象的简明访问如果通过%request.setAttribute(“user”,“chengdong”);%定义了一个属性对象(1)将这个属性对象输出,应该使用如下语句%Strings=(String)request.getAttribute(“user”);out.print(s);%或%=request.getAttribute(“user”)%(2)如果采用表达式语言,则写出如下语句即可${user}软件学院回顾--EL隐含对象隐含对象JSP隐含对象paramValuesparamapplicationScoperequestScopesessionScopepageScope作用域访问对象参数访问对象pageContextJSP其他对象cookie软件学院回顾--param和paramValues对象使用对象param可以访问请求的参数值下面的语句会输出请求参数userName的值${param.userName}它相当于:%=request.getParameter(“userName”)%如果一个参数名对应多个值时,就需要使用paramValues对象了如果请求参数user对应多个值,那么获取其各个值的方法为:${paramValues.user[i]}其中i表示第几个值,它从0开始取值)软件学院文件读写文件的上传与下载12教学内容软件学院教学目标难点掌握创建和修改文件及文件夹的方法重点理解文件读写方式掌握文件上传与下载RandomAccess流文件上传软件学院教学具体内容文件管理字节流读写文件字符流读写文件文件上传与下载软件学院获得文件夹的物理路径在JSP中,使用request对象的getRealPath()方法来获得文件夹的物理路径。如:center本章JSP文件所在路径为:br%=request.getRealPath(/)%br/center在调用request对象的getRealPath()方法时,使用斜杠“/”代表本Web应用地址。软件学院10.1文件管理File类的对象主要用来获取文件本身的一些信息,例如文件所在的目录、文件的长度、文件读写权限等,不涉及对文件的读写操作。File类表示与平台无关的文件操作,只负责文件本身,而不负责文件内容。常见操作有:文件目录的操作和文件的操作创建一个File对象的语法结构有以下两种:FileFile对象变量=newFile(服务器端的绝对路径)FileFile对象变量=newFile(服务器端的绝对路径,文件名称)软件学院10.1.1文件目录操作创建文件目录其语法结构如下:FileFile对象变量=newFile(服务器端的绝对路径);File对象变量.mkdir();删除文件目录其语法结构如下:FileFile对象变量=newFile(服务器端的绝对路径);File对象变量.delete();软件学院10.1.1文件目录操作判断目录文件是否存在首先建立File对象,再用File对象的exists()方法来判断文件目录是否存在。其语法结构如下:FileFile对象变量=newFile(服务器端的绝对路径);File对象变量.exists();软件学院10.1.2文件操作创建文件语句建立文件的File对象,然后,调用File对象的createNewFile()方法来建立文件。其语法结构如下:FileFile对象变量=newFile(服务器端的绝对路径,文件名称);File对象变量.createNewFile();软件学院10.1.2文件操作判断文件是否存在首先建立文件File对象,再调用File对象的exists()方法判断文件是否存在。其语法结构如下:FileFile对象变量=newFile(服务器端的绝对路径,文件名称);File对象变量.exists();软件学院10.1.2文件操作文件的删除首先建立文件File对象,再调用File对象的delete()方法删除文件。其语法结构如下:FileFile对象变量=newFile(服务器端的绝对路径,文件名称);File对象变量.delete();软件学院10.1.2文件操作获取文件属性File对象.getName():获取文件的名字File对象.canRead():判断文件是否可读File对象.canWrite():判断文件是否可被写入File对象.length():判断文件的长度(单位是字节)File对象.getAbsolutePath():获取文件的绝对路径File对象.getParent():获取文件的父目录File对象.isFile():判断文件是否是一个正常文件,而不是目录File对象.isDirectroy():判断文件是否是一个目录File对象.isHidden():判断文件是否是隐藏文件File对象.lastModified():获取文件最后修改的时间软件学院10.1.2文件操作获取目录下的文件及目录FileFile对象变量=newFile(服务器端的绝对路径);File对象变量.listFiles();Stringpath=request.getRealPath(/);Stringtmp_path=path+tmp;Filefp1=newFile(tmp_path);Filefilelist[]=fp1.listFiles();使用getName()方法获得文件夹和文件的名称。软件学院10.2字节流读写文件使用IO操作必须按照以下步骤:1使用File找到一个文件2使用字节流或者字符流的子类为InputStream,OutputStream,Reader,Writer进行实例化操作3进行读写操作4关闭:close()在流的操作最后必须进行关闭软件学院10.2.1字节流读文件InputStream类的常用方法:abstractintread()输入流调用该方法从源中读取单个字节的数据,该方法返回字节值(0~255之间的一个整数)。如果未读出字节就返回-1。(每次读一个数据)intread(byteb[])输入流调用该方法从源中试图读取b.length个字节到字节数组b中,返回实际读取的字节数目。如果到达文件的末尾,则返回-1。(将内容读到字节数组中)intread(byteb[],intoff,intlen)输入流调用该方法从源中试图读取len个字节到字节数组b中,并返回实际读取的字节数目。如果到达文件的末尾,则返回-1。参数off指定从字节数组的某个位置开始存放读取的数据。voidclose()输入流调用该方法关闭输入流。软件学院10.2.1字节流读文件FlieInputStream类的常用方法:FileInputStream类是InputStream类中派生出来的简单输入类,该类的所有方法都是从InputStream类继承而来的。构造函数:FileInputStream(Stringname);FileInputStream(Filefile);一般是在try-catch语句的try块部分创建输入流对象,在catch(捕获)部分检测并处理这个异常。主要方法:intread();intread(byteb[]);intread(byteb[],intoff,intlen);软件学院读取一个名为myfile.dat的文件,建立一个文件输入流try{FileInputStreamisStream=newFileInputStream(“myfile.dat”);}//建立输入流catch(IOExceptione){System.out.println(“filereaderror:”+e);}或者try{Filef=newFile(“myfile.dat”);FileInputStreamisStream=newFileInputStream(f);}catch(IOExceptione){System.out.println(“filereaderror:”+e);}软件学院10.2.2字节流写文件OutputStream类的常用方法:abstactvoidwrite(intn)输出流调用该方法向输出流写入单个字节。(每次写一个数据)voidwrite(byteb[])输出流调用该方法向输出流写入一个字节数组。(写入全部字节数组)voidwrite(byteb[],intoff,intlen)从给定字节数组中起始于偏移量off处取len个字节写入到输出流。voidclose()关闭输出流。软件学院10.2.2字节流写文件FlieOutputStream类的常用方法:FileOutputStream类提供了基本的文件写入的能力。构造函数:FileOutputStream(Filefile)FileOutputStream(Filefile,booleanappend)FileOutputStream(Stringname)FileOutputStream(Stringname,booleanappend)一般是在try-catch语句的try块部分创建输出流对象,在catch(捕获)部分检测并处理这个异常主要方法:voidwrite(byteb[]);voidwrite(byteb[],intoff,intlen);voidwrite(intn)软件学院10.2.3BufferedInputStream和BufferedOutputStreamBufferedInputStream类的一个常用的构造方法是:BufferedInputStream(InputStreamin);BufferedInputStream调用read方法读取文件的内容,读取过程中会进行缓存处理,提高读取效率。读取文件A.txt常用下列方式:1.先建立一个指向该文件的文件输入流:FileInputStreamin=newFileInputStream(A.txt);2.然后建立一个指向文件输入流in的输入缓存流:BufferedInputStreambufferRead=newBufferedInputStream(in);软件学院10.2.3BufferedInputStream和BufferedOutputStreamBufferedOutputStream调用write方法写入文件时会进行缓存处理,提高写入的效率,写入完毕后,必须调用flush方法将缓存中的数据存入文件常用的构造方法是Buffered