jsp中的file类

1、 File 类

File类的对象主要用来获取文件本身的一些信息,例如文件所在的目录、文件的长度、文件读写权限等,不涉及对文件的读写操作。创建一个File对象的构造方法有3个:

File(String filename);

File(String directoryPath,String filename);

File(File f, String filename); (f是指定成一个目录的文件

使用 File(String filename)创建文件时,该文件被认为是与当前应用程序在同一目录中,由于 JSP引擎是在 bin下启动执行的,所以该文件被认为在下列目录中:

D:\Tomcat\jakarta-tomcat-4.0\bin\ 。

 

2、获取文件的属性

经常使用 File类的下列方法获取文件本身的一些信息:

1. public String getName():获取文件的名字。

2. public boolean canRead():判断文件是否是可读的。

3. public boolean canWrite():判断文件是否可被写入。

4. public boolean exits():判断文件是否存在。

5. public long length():获取文件的长度(单位是字节)。

6. public String getAbsolutePath():获取文件的绝对路径。

7. public String getParent():获取文件的父目录。

8. public boolean isFile():判断文件是否是一个正常文件,而不是目录。

9. public boolean isDirectroy():判断文件是否是一个目录。

10. public boolean isHidden():判断文件是否是隐藏文件。

11. public long lastModified():获取文件最后修改的时间(时间是从 1970年午夜至文件最后修改时刻的毫秒数)。

 3、创建目录

(1)创建目录

File对象调用方法:public boolean mkdir()创建一个目录,如果创建成功返回 true,否则返回

false(如果该目录已经存在将返回 false)。

 

<% File dir=new File("D:/Tomcat/jakarta-tomcat-4.0/webapps/root","Students"); %>

<P> 在 root下创建一个新的目录:Student,<BR>成功创建了吗?

<%=dir.mkdir()%>

<P> Student是目录吗?

<%=dir.isDirectory()%>

 

4、列出指定类型的文件

列出指定类型的文件,public String[] list(FilenameFilter obj); 该方法用字符串形式返回目录下的指定类型的所有文件。 public File [] listFiles(FilenameFilter obj); 该方法用 File对象返回目录下的指定类型所有文件。 FilenameFile是一个接口,该接口有一个方法: public boolean accept(File dir,String name);当向 list方法传递一个实现该接口的对象时,list方法在列出文件时,将让该文件调用accept方法检查该文件是否符合 accept方法指定的目录和文件名字要求。

<%! class FileJSP implements FilenameFilter

{ String str=null;

FileJSP(String s)

{str="."+s; }

public boolean accept(File dir,String name)

{ return name.endsWith(str); }

}

%>

 

<% File dir=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/");

FileJSP file_jsp=new FileJSP("jsp");

String file_name[]=dir.list(file_jsp);

for(int i=0;i<5;i++)

{out.print("<BR>"+file_name[i]);

}

%>

 

5、 删除文件和目录

File对象调用方法 public boolean delete()可以删除当前对象代表的文件或目录,如果 File对象表示的是一个目录,则该目录必须是一个空目录,删除成功返回 true。

<%File f=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root/","A.java");

File dir=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root","Students");

boolean b1=f.delete();

boolean b2=dir.delete();

%>

 

6、使用字节流读写文件

Java I/O流提供一条通道程序,可以使用这条通道把源中的数据送给目的地。把输入流的指向称做源,程序从指向源的输入流中读取源中的数据。而输出流的指向是数据要去的一个目的地,程序通过向输出流中写入数据把信息传递到目的地,

InputStream类的常用方法:

2 int read(): 输入流调用该方法从源中读取单个字节的数据,该方法返回字节值(0~255之间的一个整数),如果未读出字节就返回-1。

int read(byte b[]):2 输入流调用该方法从源中试图读取 b.length个字节到b中,返回实际读取的字节数目。如果到达文件的末尾,则返回-1。

int read(byte b[], int off, int len): 2 输入流调用该方法从源中试图读取 len个字节到b中,并返回实际读取的字节数目。如果到达文件的末尾,则返回-1,参数off指定从字节数组的某个位置开始存放读取的数据。

 void close():2 2 输入流调用该方法关闭输入流。

long skip(long numBytes): 输入流调用该方法跳过numBytes个字节,并返回实际跳过的字节数目。

 

OutputStream类的常用方法:

2 void write(int n): 输出流调用该方法向输出流写入单个字节。

2 void write(byte b[]):  输出流调用该方法向输出流写入一个字节数组。

2 void write(byte b[],int off,int len):从给定字节数组中起始于偏移量 off处取len个字节写到输出流。

2 void close():关闭输出流。

 

7、 FileInputStream 和 FileOutputStream类 :

FileInputStream该类是从InputStream中派生出来的简单输入类。

FileInputStream(String name); FileInputStream(File file);

第一个构造方法使用给定的文件名 name创建一个 FileInputStream对象,第二个构造方法使用 File对象创建 FileInputStream对象。参数 name和 file指定的文件称做输入流的源,输入流通过调用 read方法读出源中的数据。

File f = new File("myfile.dat");

FileInputStream istream = new FileInputStream(f);

 

FileOutputStream

FileOutputStream提供了基本的文件写入能力。除了从 FileOutputStream类继承来的方法以外,FileOutputStream类还有两个常用的构造方法,这两个构造方法如下所示:

FileOutputStream(String name); FileOutputStream(File file);

第一个构造方法使用给定的文件名name创建一个FileOutputStream对象。第二个构造方法使用File对象创建FileOutputStream对象。参数name file指定的文件称做输出流的目的地,通过向输出流中写入数据把信息传递到目的地。

使用 FileInputStream的构造方法:FileInputStream(String name)创建一个输入流时,以及使用 FileOutputStream的构造方法:FileOutputStream(String name)创建一个输出流时要保证文件和当前应用程序在同一目录下。由于JSP引擎是在 bin下启动执行的,所以文件必须在bin目录中。

在下面的例子 6中,服务器将若干内容写入一个文件,然后读取这个文件,并将文件的内容显示给客户。

 

<%File dir=new File("D:\\tomcat\\webapps\\root\\","Studentssssssss");
dir.mkdir();
File f=new File(dir,"hello.txt");
try{
FileOutputStream outfile=new FileOutputStream(f);
BufferedOutputStream bufferout=new BufferedOutputStream(outfile);
byte b[]="你们好,很高兴认识你们呀!<BR>nice to meet you".getBytes();
bufferout.write(b);
bufferout.flush();
bufferout.close();
outfile.close();
FileInputStream in=new FileInputStream(f);
BufferedInputStream bufferin=new BufferedInputStream(in);
byte c[]=new byte[90];
int n=0;
while((n=bufferin.read(c))!=-1)
{ String temp=new String(c,0,n);
out.print(temp); }
bufferin.close();
in.close();

 }
catch(IOException e)
{
}

%>

 

8、Reader类中常用方法:

2 int read():输入流调用该方法从源中读取一个字符,该方法返回一个整数0~65535之间的一个整数,Unicode字符值),如果未读出字符就返回-1。

int read(char b[]):2 输入流调用该方法从源中读取b.length个字符到字符数组 b中,返回实际读取的字符数目。如果到达文件的末尾,则返回-1。

2 输入流调用该方法从源中读取len个字符int read(char b[], int off, int len): 并存放到字符数组 b中,返回实际读取的字符数目。如果到达文件的末尾,则返回-1。其中,off参数指定 read方法从符数组b中的什么地方存放数据。

void close():2 输入流调用该方法关闭输入流。

long skip(long numBytes): 2 输入流调用该方法跳过numBytes个字符,并返回实际跳过的字符数目。

9、Writer类中常用方法:

2 void write(int n): 向输入流写入一个字符。

void write(byte b[]): 向输入流写入一个字符数组。

void write(byte b[],int off,int length): 2 从给定字符数组中起始于偏移量off处取 len个字符写到输出流。

void close():2 关闭输出流。

 

10、 FileReader  FileWriter

在下面的例子 7中,服务器将若干内容写入一个文件,然后读取这个文件,并将文件的内容显示给客户。

 <%

File dir=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root","Students");

dir.mkdir();

File f=new File(dir,"apple.txt");

try{FileWriter outfile=new FileWriter(f);

BufferedWriter bufferout=new BufferedWriter(outfile);

bufferout.write("你好:");

bufferout.newLine();

bufferout.write("好久不见了,近来在忙什么呢?");

bufferout.newLine();

bufferout.write("欢迎来玩");

bufferout.newLine();

bufferout.write("2002年 8月 8日");

bufferout.flush();

bufferout.close();

outfile.close();

FileReader in=new FileReader(f);

BufferedReader bufferin=new BufferedReader(in);

String str=null;

while((str=bufferin.readLine())!=null)

{out.print("<BR>"+str);

}

bufferin.close();

in.close();

}

catch(IOException e) { }

下面的例子 8是一个网络英语单词测试,客户首先访问 Example4_8.jsp页面,该页面通过输入流技术将一个文本文件读入,这个文本的每一行是一个英语单词选择练习,如下所示:

English.txt:

#Take an umbrella with you in case___#it will rain#it rains#it raining#it rained#B#

#He is no longer the honest man___he was#who#whom#which#that#D#

#During the recession, thousands of workers were____#laid on#laid down#laid out#laid off#B#

#The building casts a large__on the ground#shadow#shade#shanpoo#shawl#D#

#The driver came close to ___killed for speeding#having been#have been#be#being#A#

然后把文本的每一行都存入客户的session对象中,并用行号做关键字,需要时可通过这个关键字在 session对象中查找这一行,同时,将一个分数属性也存入客户的 session对象中。

客户点击“开始练习”按钮进入练习页面 Exercise.jsp,该页面从客户的session对象中首先取出第一行,然后通过StringTokenizer类将该行的语言符号取出。将第一个语言符号作为试题,第 2到第 4个语言符号作为选择,第 5个语言符号是该试题的答案,把该题的答案存入客户的 session对象中,将来根据题号在session对象中检索这个答案。当客户点击该页面中的“提交答案”按钮后再从session对象取出下一行,依次类推。

图 4.9 英语单词测试练习

例子 8(效果如图 4.9所示)

Example4_8.jsp:

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import ="java.io.*" %>

<%@ page import ="java.util.*" %>

<% int i=0;

String str=null;

Integer score=new Integer(0);

Integer number=new Integer(0);

session.setAttribute("score",score);

session.setAttribute("序号",number);

try{ //englishi.txt存放在 f:/2000目录下。

File f=new File("f:/2000","English.txt");

FileReader in=new FileReader(f);

BufferedReader buffer=new BufferedReader(in);

while((str=buffer.readLine())!=null)

{i++;

session.setAttribute(""+i,str);

}

} catch(IOException e) {  }

%>

<HTML>

<BODY>

<P><BR>点击按钮进入练习页面:

<FORM action="Exercise.jsp" method="post" name=form>

<Input type=submit value="开始练习">

</FORM>

</BODY> </HTML>

Exercise.jsp:

<%@ page contentType="text/html;charset=GB2312" %>

<%@ page import ="java.io.*" %>

<%@ page import ="java.util.*" %>

<HTML>

<BODY>

<% String option[]=new String[7];

int 题号=0;

if(!(session.isNew()))

{ Integer number=(Integer)session.getAttribute("序号");//获取题号。

if(number==null)

{number=new Integer(0);

 }

number=new Integer(number.intValue()+1);//将题号加1。

session.setAttribute("序号",number); //更新序号

int i=0;

String str=(String)session.getAttribute(""+number);//获取行号是number的文本。

if(str==null)

{str="#练习结束#练习结束#练习结束#练习结束#练习结束#再见#"; }

StringTokenizer tokenizer=new StringTokenizer(str,"#");//分析该行文本。

while(tokenizer.hasMoreTokens())

{option[i]=tokenizer.nextToken();

i++; }

题号=number.intValue();

session.setAttribute("答案"+题号,option[5]); //将该题答案存入 session。

out.print("<BR>"+"试题"+number+"<BR>"+option[0]);

out.print("<BR>请选择您的答案:");

out.print("<FORM action=Exercise.jsp method=post name=form>");

out.print("<BR>"+"<Input type=radio name=R value=A>");

out.print("A. "+option[1]);

out.print("<BR>"+"<Input type=radio name=R value=B>");

out.print("B. "+option[2]);

out.print("<BR>"+"<Input type=radio name=R value=C>");

out.print("C. "+option[3]);

out.print("<BR>"+"<Input type= radio name=R value=D>");

out.print("D. "+option[4]);

out.print("<BR>"+"<Input type=submit name=submit value=提交答案 >");

out.print("</FORM>");

}

%>

<% String answer=request.getParameter("R");//获取客户提交的答案。

//获取题目的标准答案,需要注意的是:客户提交答案后,该页面就将题号增加1

// 因此,要给客户的上一题进行评判必须将题号减1。

String 答案=(String)session.getAttribute("答案"+(题号-1));

if(answer==null)

{answer="您没有给出选择呢"; }

if(answer.equals(答案))

{ Integer score=(Integer)session.getAttribute("score");

score=new Integer(score.intValue()+1);

session.setAttribute("score",score);

}

out.print("<BR>"+"您现在的得分是:"+session.getAttribute("score"));

out.print("<BR>"+"你的上一题的选择是:"+answer);

out.print("<BR>"+"上一题的正确答案是:"+答案);

%>

</BODY>

</HTML>

 

11、回压字符流

称PushbackReader类创建的对象为回压字符流。回压流可以使用unread(char ch)将一个字符回压到该流中,被回压的字符是该回压流紧接着再调用read()方法时最先读出的字符。回压流可以用来监视读出的信息,当读出一个不需要的信息时,可以不处理该信息,而将需要的信息回压,然后再读出回压的信息。该类的构造方法是: PushbackReader(Reader in);

当我们使用前面讲的字节输入流或字符输入流把JSP文件或超文本文件发送给客户时,客户的浏览器将解释运行超文本标记,客户无法看见原始的超文本文件和JSP文件。我们可以使用回压流技术,读取原始的网页文件,当读取到“<”符号时,将“&LT”回压、读取到“>”时,将“&GT”回压。

 

<%File f=new File("d:/Tomcat/Jakarta-tomcat-4.0/webapps/root","Example2_4.jsp");

try{ FileReader in=new FileReader(f) ;

PushbackReader push=new PushbackReader(in);

int c;

char b[]=new char[1];

while ( (c=push.read(b,0,1))!=-1)//读取 1个字符放入字符数组b。

 { String s=new String(b);

if(s.equals("<")) //回压的条件

 { push.unread('&');

push.read(b,0,1); //push读出被回压的字符字节,放入数组 b.

out.print(new String(b));

push.unread('L');

push.read(b,0,1); //push读出被回压的字符字节,放入数组b.

out.print(new String(b));

push.unread('T');

push.read(b,0,1); //push读出被回压的字符字节,放入数组 b.

out.print(new String(b));

}

else if(s.equals(">")) //回压的条件

{ push.unread('&');

push.read(b,0,1); //push读出被回压的字符字节,放入数组b.

out.print(new String(b));

push.unread('G');

push.read(b,0,1); //push读出被回压的字符字节,放入数组b.

out.print(new String(b));

push.unread('T');

push.read(b,0,1); //push读出被回压的字符字节,放入数组b.

out.print(new String(b));

} else if(s.equals("\n"))

{ out.print("<BR>");

} else

{out.print(new String(b)); }

 }

push.close();

} catch(IOException e){}

%>

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值