<%@ page import="java.io.*"%>
<%
String root=application.getRealPath("/");
String fileName=request.getParameter("fileName");
String filePath=request.getParameter("filePath");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition",
"attachment; filename=\"" +fileName+ "\"");
try{
java.io.OutputStream os = response.getOutputStream(); //不加此行將只能下載文本文件.下載jpg等就會(huì)出現(xiàn)打不開的現(xiàn)象.
java.io.FileInputStream fis = new java.io.FileInputStream(root+filePath);
byte[] b = new byte[1024];
int i = 0;
while ( (i = fis.read(b)) > 0 )
{
os.write(b, 0, i);
}
fis.close();
os.flush();
os.close();
}
catch ( Exception e )
{
System.out.println ( "IOException." + e );
}
%>
java.io.FileInputStream fis = new java.io.FileInputStream(文件的真實(shí)路徑);
也可以
<%
if (request.getParameter("fileUrl") != null)
{
String strFileUrl = request.getParameter("fileUrl");
//獲取文件名(DealFile是自己寫的一個(gè)處理文件的一個(gè)類)
DealFile dealFile = new DealFile(strFileUrl);
String filename = dealFile.getFileName();
response.setHeader("content-type","application/octet-stream");
response.setHeader("Content-Disposition","attachment;filename=\""+ filename+"\"");
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
//從文件所在目錄以流的方式讀取文件
bis = new BufferedInputStream(new FileInputStream(getServletContext().getRealPath(strFileUrl)));
bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while(-1 != (bytesRead = bis.read(buff, 0, buff.length)))
{
bos.write(buff,0,bytesRead);
}
bos.flush();
}
catch(final IOException e)
{
System.out.println ( "IOException." + e );
}
finally
{
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
return;
}
%>
[http://www.javaalmanac.com] - Java開發(fā)者年鑒一書的在線版本. 要想快速查到某種Java技巧的用法及示例代碼, 這是一個(gè)不錯(cuò)的去處.
[http://www.onjava.com] - O'Reilly的Java網(wǎng)站. 每周都有新文章.
[http://java.sun.com] - 官方的Java開發(fā)者網(wǎng)站 - 每周都有新文章發(fā)表.
[http://www.developer.com/java] - 由Gamelan.com 維護(hù)的Java技術(shù)文章網(wǎng)站.
[http://www.java.net] - Sun公司維護(hù)的一個(gè)Java社區(qū)網(wǎng)站.
[http://www.builder.com] - Cnet的Builder.com網(wǎng)站 - 所有的技術(shù)文章, 以Java為主.
[http://www.ibm.com/developerworks/java] - IBM的Developerworks技術(shù)網(wǎng)站; 這是其中的Java技術(shù)主頁.
[http://www.javaworld.com] - 最早的一個(gè)Java站點(diǎn). 每周更新Java技術(shù)文章.
[http://www.devx.com/java] - DevX維護(hù)的一個(gè)Java技術(shù)文章網(wǎng)站.
[http://www.fawcette.com/javapro] - JavaPro在線雜志網(wǎng)站.
[http://www.sys-con.com/java] - Java Developers Journal的在線雜志網(wǎng)站.
[http://www.javadesktop.org] - 位于Java.net的一個(gè)Java桌面技術(shù)社區(qū)網(wǎng)站.
[http://www.theserverside.com] - 這是一個(gè)討論所有Java服務(wù)器端技術(shù)的網(wǎng)站.
[http://www.jars.com] - 提供Java評(píng)論服務(wù). 包括各種framework和應(yīng)用程序.
[http://www.jguru.com] - 一個(gè)非常棒的采用Q&A形式的Java技術(shù)資源社區(qū).
[http://www.javaranch.com] - 一個(gè)論壇,得到Java問題答案的地方,初學(xué)者的好去處。
[http://www.ibiblio.org/javafaq/javafaq.html] - comp.lang.java的FAQ站點(diǎn) - 收集了來自comp.lang.java新聞組的問題和答案的分類目錄.
http://java.sun.com/docs/books/tutorial/] - 來自SUN公司的官方Java指南 - 對(duì)于了解幾乎所有的java技術(shù)特性非常有幫助.
http://www.javablogs.com] - 互聯(lián)網(wǎng)上最活躍的一個(gè)Java Blog網(wǎng)站.
http://java.about.com/] - 來自About.com的Java新聞和技術(shù)文章網(wǎng)站.
Servlet的演變:在常規(guī)的 JSP,Servlet,JavaBean三層結(jié)構(gòu)中,JSP實(shí)現(xiàn)View的功能,Servlet實(shí)現(xiàn)Controller的功能,JavaBean實(shí)現(xiàn)Model的實(shí)現(xiàn)。
在Struts中,將常規(guī)情況下的Servlet拆分與ActionServlet、FormBean、ActionBean三個(gè)部分。ActionServlet配合Struts-config.xml,專職完成頁面導(dǎo)航,而不再負(fù)責(zé)具體的數(shù)據(jù)獲取與相應(yīng)邏輯,這兩部分功能由FormBean和ActionBean來完成。
Struts的核心是Controller,即ActionServlet,而ActionServlet的核心就是Struts-config.xml,Struts-config.xml集中了所有頁面的導(dǎo)航定義。對(duì)于大型的WEB項(xiàng)目,通過此配置文件即可迅速把握其脈絡(luò),這不管是對(duì)于前期的開發(fā),還是后期的維護(hù)或升級(jí)都是大有裨益的。掌握Struts-config.xml是掌握Struts的關(guān)鍵所在。
<struts-config>
<data-sources />
<form-beans >
<form-bean name="systemForm" type="com.gdglc.survey.form.SystemForm" />
<form-bean name="FindMemberForm" type="org.apache.struts.validator.DynaValidatorForm">
<form-property name="findName" type="java.lang.String"/>
</form-bean>
</form-beans>
<global-exceptions />
<global-forwards>
<forward name="showMsg" path="/msg.jsp" />
</global-forwards>
<action-mappings>
<action
path="/list"
type="com.gdglc.survey.action.ListAction">
<forward name="list" path="/list.jsp"/>
</action>
<action
attribute="systemForm"
input="/admin/System_Base_List.jsp"
name="systemForm"
path="/systemBaseModify"
type="com.gdglc.survey.action.SystemAction"
scope="request"
validate="false">
</action>
</action-mappings>
<message-resources parameter="com.gdglc.application" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
<set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
</plug-in>
</struts-config>
每一個(gè)FormBean 都必須繼承ActionForm類,F(xiàn)ormBean是對(duì)頁面請(qǐng)求的封裝。即把HTTP request 封裝在一個(gè)對(duì)象中,需要說明的一點(diǎn)就是多個(gè)HTTP request可以共用一個(gè)FormBean,便于維護(hù)和重用。
使用Resin開發(fā)Java Web項(xiàng)目時(shí),需要建立自己的WebApp。這里不介紹Resin Cmp/Ejb的開發(fā)和使用,只介紹用Resin開發(fā)普通的jsp\java servlet項(xiàng)目。在這里還要談到resin.conf的配置。Resin中的應(yīng)用可以有2種方式發(fā)布:一是在Resin的目錄下發(fā)布;二是打包成War發(fā)布。
1、在Resin的目錄下發(fā)布
在resin.conf中查找<web-app>標(biāo)簽,該標(biāo)簽表示一個(gè)web應(yīng)用。
標(biāo)簽中,id屬性表示該應(yīng)用的Web路徑。如<web-app id=’/test’>,表示該應(yīng)用在Web上訪問的時(shí)候應(yīng)該用http://hostname/test/來訪問。app-dir屬性表示該應(yīng)用的實(shí)際路徑。如<app-dir>d:\resin\doc\test</app-dir>表示該應(yīng)用在d:\resin\doc\test目錄下面。默認(rèn)值為根下面的和id同名的目錄。Resin可以配置3種error-page:404錯(cuò)誤也就是文件找不到錯(cuò)誤頁;Exception違例頁;不能連接java引擎頁。他們分別可以這樣子設(shè)置。
404文件找不到頁
<web-app id='/app1'>
<error-page error-code='404' location='/file_not_found.jsp'/>
</web-app>
Exception 違例頁
<web-app id='/foo'>
<error-page exception-type='java.lang.NullPointerException'
location='/nullpointer.jsp'/>
</web-app>
不能連接到srun Servlet引擎錯(cuò)誤頁
該頁設(shè)置和應(yīng)用無關(guān),屬于服務(wù)器的設(shè)置。
<http-server>
<error-page exception-type='connection'
location='/missing_file.html'/>
</http-server>
classpath的設(shè)置
參見下面的語句:
<classpath id='WEB-INF/classes' source='WEB-INF/src' compile='true'/>
id參數(shù)的值表示classpath中編譯后的classpath的存放路徑;source參數(shù)的值表示classpath中java源代碼的存放路徑;compile中的值可能是true或者false,表示是否由Resin的srun自動(dòng)編譯java源代碼。Classpath的設(shè)置一般和javaBean或者Servlet的使用有關(guān)。id的值表示javaBean的編譯好的包存放的根,source的值表示javaBean的java源代碼存放的根。Servlet相同。
Servlet的設(shè)置
參見下面的語句:
<servlet-mapping url-pattern='*.xtp' servlet-name='xtp'/>
<servlet-mapping url-pattern='*.jsp' servlet-name='jsp'/>
<servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/>
一般就是指定那些需要通過srun的解析。比如在這里,把*.jsp改成*.jss,其他不變,那么只要在訪問時(shí)遇到*.jss的文件就和原來遇到*.jsp一樣處理。通過這個(gè)可以指定解析的引擎,如以下的配置:
<servlet-mapping url-pattern='*.xtp' servlet-name='com.caucho.jsp.XtpServlet'/>
在Servlet中,也可以指定servlet。如
<servlet servlet-name='hello' servlet-class='test.HelloWorld'/>
<servlet-mapping url-pattern='/hello.html' servlet-name='hello'/>
在servlet-mapping中有個(gè)重要的參數(shù)case-sensitive 如果在windows上,最好配置成false,忽略大小寫,從而和windows的約定一致。
Session的配置
參見如下的配置語句:
<session-config>
<session-max>4096</session-max>
<session-timeout>30</session-timeout>
<enable-cookies>true</enable-cookies>
<enable-url-rewriting>true</enable-url-rewriting>
<file-store>WEB-INF/sessions</file-store>
</session-config>
session-max :最大 session數(shù)量
session-timeout :session過期時(shí)間,以分鐘為單位。
是否允許cookie :指session是否采用cookies。如果采用cookies,瀏覽器必須支持session才能使用,發(fā)布時(shí)建議改成false。enable-url-rewriting和enable-cookies一般配合使用。如果enable-cookies是false,enable-url-rewriting應(yīng)該設(shè)成true比較合適。
file-store :該配置指示服務(wù)器是否把session作為文件存放在服務(wù)器上。如果把該項(xiàng)注釋掉,則在你的web-app目錄下的WEB-Inf/sessions目錄不保存序列化后的session對(duì)象。Session還有jdbc-store配置,對(duì)應(yīng)著把session通過jdbc永久保存在數(shù)據(jù)庫中。其實(shí)也就是會(huì)話變量的序列化后的保存和重新載入的物理實(shí)現(xiàn)。在這里session還支持了多服務(wù)器的設(shè)置問題,
通過tcp-store參數(shù)設(shè)置。由于涉及到負(fù)載平衡的問題,在這里不詳細(xì)敘述,只簡單寫一個(gè)例子:
<http-server>
<http id='a' port='80'/>
<srun id='a' host='host-a' port='6802'/>
<http id='b' port='80'/>
<srun id='b' host='host-b' port='6802'/>
<host id=''>
<web-app id=''>
<session-config>
<tcp-store/>
<always-load-session/>
</session-config>
</web-app>
</host>
</http-server>
這個(gè)例子表示session是按照tcp ring的方式傳遞。
temp-dir 的設(shè)置
temp-dir指的是應(yīng)用的臨時(shí)目錄。也就是在javax.servlet.context.tempdir中用到的目錄。模認(rèn)是應(yīng)用目錄下的WEB-INF\tmp目錄。
以上的設(shè)置都可以在<web-app>標(biāo)簽對(duì)中設(shè)置,控制某個(gè)web應(yīng)用的設(shè)置。
2、打包成War發(fā)布
以下是介紹對(duì)如何在resin下使用已經(jīng)打包成War的java Web應(yīng)用進(jìn)行發(fā)布。
其實(shí)這個(gè)是最簡單也是最清晰的良好方法。在j2ee中,所有的項(xiàng)目都打包成ear發(fā)布。其中,Web應(yīng)用打包成war,ejb應(yīng)用打包成jar。在resin中,這些都可以直接部署。這里我只對(duì)打包成war的Web應(yīng)用的部署做介紹。
在resin.conf中,查找這個(gè):<war-dir id='webapps'/>。他表示war文件應(yīng)該被拷貝的路徑。這里指的是相對(duì)于resin的安裝路徑,如以上的設(shè)置表示d:\resin\webapps。只要重新啟動(dòng)Resin就可以了。Resin會(huì)把該war自動(dòng)解包到webapps目錄下。你可以在command控制臺(tái)或者stdout.log中看到類似于
[2002-04-27 09:56:21.680] initializing application http://haitaiserver:8080/rwtest 的語句。這個(gè)表示該Web應(yīng)用是自動(dòng)安裝的。只要這個(gè)應(yīng)用是符合j2ee標(biāo)準(zhǔn)的Web應(yīng)用,應(yīng)該不會(huì)有問題。通過如上顯示的路徑就可以訪問到這個(gè)應(yīng)用。如果你到d:\resin\webapps\rwtest中瀏覽,你會(huì)看到Resin已經(jīng)為你生成了rwtest目錄,下面是META-INF和WEB-INF還有你自己的JSP\servlet 文件和目錄。是完全符合j2ee的結(jié)構(gòu)的。你可以在rwtest目錄下建立新的jsp\servlet,一樣可以被編譯和解析并運(yùn)行的。在實(shí)際操作中,可以使用Jbuilder 或者 WebSphere等Ide工具進(jìn)行集成調(diào)試和打包,非常的方便。
使用Resin進(jìn)行java Web項(xiàng)目的開發(fā)和調(diào)試
這里篇幅有限,不可能講太多,我只對(duì)實(shí)際中最有用的部分做介紹。
Resin中如果定義了錯(cuò)誤頁,則出錯(cuò)后最常見的一大串Exception不會(huì)被看到,直接跳轉(zhuǎn)到錯(cuò)誤頁。所以建議開發(fā)中先不設(shè)置錯(cuò)誤頁。jsp錯(cuò)誤中最常見的就是Nullpoint Exception,其次是名稱的拼寫錯(cuò)誤。錯(cuò)誤也可以在Resin安裝目錄下的log目錄下的stderr.log中找到。通過對(duì)該log文件的分析可以看到很多有用的錯(cuò)誤信息。
在調(diào)試jsp的時(shí)候,如果定義了compile為true,jsp先被翻譯成Servlet的java文件,再被編譯成class文件。可以在你自己的work目錄中找到該文件。java的名稱在Resin中是這樣子定義的:原先的jsp文件名前加下劃線,再加上_jsp這個(gè)字樣。所以在java 應(yīng)用中的命名不要以_jsp結(jié)尾,也不要出現(xiàn)中文名稱等字符;其實(shí)名稱以_jsp為開頭也是不合法的。
關(guān)于java對(duì)多國語言的支持問題,在Resin中得到了很好的解決。以jsp為例,參考Resin自動(dòng)生成的java Servlet文件。只要在任何的jsp文件的最開始處增加:
<%@page contentType="text/html;charset=gb2312" %>
中文問題就解決了。察看生成的Servlet源文件片斷:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("GB2312");
以上為設(shè)置字符集
private static byte []_jsp_string26;
private static byte []_jsp_string27;
_jsp_string26 = "\r\n</table>\r\n<table class=\"type\">\r\n<tr>\r\n <td>".getBytes("GB2312");
_jsp_string27 = "\r\n</td><td>\r\n</tr>\r\n<!--\r\n<tr>\r\n<td>\r\".getBytes("GB2312");
以上是對(duì)頁面的顯示的編碼。其中,getBytes(“gb2312”)是靜態(tài)編碼,這是Resin為了解決某些環(huán)境下還是不能正常顯示而設(shè)置的。在Resin的配置文件(/conf/resin.conf)中,可以通過設(shè)置<jsp precompile='true' static-encoding='false' recompile-on-error='true'/>中的static-encoding屬性為true或者false,來控制是否靜態(tài)編碼。其實(shí)在Resin容器的內(nèi)部,所有的字符都是按照iso-8859-1來處理的。iso-8859-1是一個(gè)大字符集,雖然中文的gb2312和8859在字的定義上有不同,但是編碼是包容了gb2312的。按照解決多國語言的方法,在純英文平臺(tái)上用iso-8859-1處理內(nèi)部編碼,而把字符的顯示推向客戶端的機(jī)器。所以這樣只要編碼是正確的,
在頁面上顯示中文就不存在問題。Tomcat3.2不方便的地方是Tomcat對(duì)數(shù)據(jù)庫的操作中文支持不好,需要手動(dòng)在java Bean或者Servlet中硬編碼。通過測(cè)試,在Resin中完全沒有這個(gè)問題。Tomcat4.0解決了這個(gè)問題。不過個(gè)人習(xí)慣來講還是覺得resin在配置方面方便一些。
在Resin中可以自動(dòng)解決引入的jar。這個(gè)在使用特殊的類或者第三方提供的開發(fā)包非常有用。方法非常簡單:只要把該jar或者是zip拷貝到Resin安裝目錄下的lib目錄下面,重新啟動(dòng)Resin,就可以了。如db2用到的db2java.zip文件,只要輕松拷貝到d:\resin\lib中就可以了。
Resin提供了對(duì)Jbuilder的集成調(diào)試。可以到:
http://www.caucho.com/projects/jbuilder/resin-jbuilder.jar免費(fèi)下載到resin的jbuilder的ide擴(kuò)展包。然后,把該包該名成:resin-jbuilder.jar,拷貝到j(luò)builder6\lib\ext目錄下。然后,把Resin2.1解包安裝在jbuilder6\resin-2.1目錄下,就可以了。打開任何的War項(xiàng)目,在project上點(diǎn)右鍵,選擇properties,選擇Servers標(biāo)簽。在原來的選擇框上,就可以看到多了一項(xiàng)Resin2.1。這樣子就可以象原來用tomcat一樣調(diào)試jsp\servlet了,而且比Tomcat更方便。見圖2:
圖2
調(diào)試方法和用Tomcat調(diào)試一樣。
其他問題
使用Resin可以和apache結(jié)合使用。也就是利用apache做http服務(wù)器,而Resin做srun服務(wù)器。可以參考resin\conf\samples目錄下的apache.conf。主要就是把 app-dir 設(shè)成 /usr/local/apache/htdocs(也就是apache的root)。同時(shí)在apache 中的http.conf也做了相應(yīng)的設(shè)置。Resin還提供了對(duì)該過程的自動(dòng)安裝程式,運(yùn)行resin\bin\setup,你可以在彈處的對(duì)話框中選擇apache,這樣子就可以了。只要你曾經(jīng)安裝過apache,resin可以自己找到httpd.conf文件所在的路徑。
使用命令行方式啟動(dòng)Resin,如果改動(dòng)了Resin.conf,Resin會(huì)自己重新啟動(dòng)適應(yīng)新的配置。這個(gè)很適合初期安裝時(shí)使用。
Resin對(duì)數(shù)據(jù)庫緩沖池的支持很好。在這里,它提供了DBPool對(duì)緩沖池做了封裝。實(shí)際使用時(shí),只要在resin.conf這樣配置:
<dbpool.sql>
<id>ORCL</id>
<driver>oracle.jdbc.driver.OracleDriver</driver>
<url>jdbc:oracle:thin:@localhost:1521:SMTH</url>
<!-- <url>jdbc:oracle:oci8:@SMTH</url> -->
<user>scott</user>
<password>tiger</password>
<max-connections>5</max-connections>
</dbpool.sql>
然后,在你的jsp或者servlet中就可以這樣子使用了:
先導(dǎo)入 com.caucho.sql.*包,然后如下直接得到連接:
Connection conn = DBPool.getPool("ORCL").getConnection();
個(gè)人建議不要如上使用連接池,還是按照ejb的方法用從Context中直接找到的DataSource對(duì)象中得到連接通用性比較好。代碼也很簡單:
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”);
Connection conn = ds.getConnection();
在Resin中如下配置jdbc就可以了:
<resource-ref>
<res-ref-name> jdbc/EmployeeDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<init-param driver-name="com.caucho.jdbc.mysql.Driver"/>
<init-param url="jdbc:mysql_caucho://localhost:3306/test"/>
<init-param user="name"/>
<init-param password="password"/>
<init-param max-connections="20"/>
<init-param max-idle-time="30"/>
</resource-ref>
用Resin Web Server開發(fā)還是比較愉快的。只是沒有像Weblogic 或者WebSphere那樣子提供現(xiàn)成的管理控制臺(tái)而已。但是從穩(wěn)定性和方便性來講,Resin個(gè)人認(rèn)為比Tomcat要好很多。況且Resin還有提供了resin-cmp 和 resin-ejb,功能更強(qiáng)大。
模式名稱 |
啟用,禁用 |
缺省啟用 |
說明 |
UNIX_LINES |
(?d)啟用,(?-d)禁用 |
是 |
啟用Unix行模式。 在此模式下,只有 '\n'被認(rèn)為是行結(jié)束符。它會(huì)影響., ^, 和 $ 的行為。 |
CASE_INSENSITIVE |
(?i)啟用,(?-i)禁用 |
否 |
啟用忽略大小寫模式。 缺省時(shí),忽略大小寫模式只會(huì)影響 ASCII字符的匹配。 而Unicode范圍的忽略大小寫匹配需要通過 UNICODE_CASE 標(biāo)志與本標(biāo)志聯(lián)合使用。 啟用此模式會(huì)影響匹配性能。 |
COMMENTS |
(?x)啟用,(?-x)禁用 |
否 |
允許空格和注釋出現(xiàn)在正則表達(dá)式中。 在此模式下,空格被忽略,以#開始的單行注釋被忽略。 |
MULTILINE |
(?m)啟用,(?-m)禁用 |
是 |
啟用多行模式。 In multiline mode the expressions ^ and $ match just after or just before, respectively, a line terminator or the end of the input sequence. By default these expressions only match at the beginning and the end of the entire input sequence. |
DOTALL |
(?s)啟用,(?-s)禁用 |
否 |
讓.可以匹配行結(jié)束符。 在此模式下,元字符.可以匹配行結(jié)束符。缺省不允許如此匹配。 |
UNICODE_CASE |
(?u)啟用,(?-u)禁用 |
否 |
Enables Unicode-aware case folding. When this flag is specified then case-insensitive matching, when enabled by the CASE_INSENSITIVE flag, is done in a manner consistent with the Unicode Standard. By default, case-insensitive matching assumes that only characters in the US-ASCII charset are being matched. 啟用此模式會(huì)影響性能。 |
CANON_EQ |
(?c)啟用,(?-c)禁用 |
否 |
Enables canonical equivalence. When this flag is specified then two characters will be considered to match if, and only if, their full canonical decompositions match. The expression "a\u030A", for example, will match the string "?" when this flag is specified. By default, matching does not take canonical equivalence into account. 啟用此模式會(huì)影響性能。 |
正則表達(dá)式字符串 |
匹配的字符串 |
X |
字符X,包括 CJK ExtB 區(qū)漢字 |
\\ |
反斜杠\ |
\0n | 八進(jìn)制0n代表的字符(0<=n<=7) |
\0nn |
八進(jìn)制0nn代表的字符(0<=n<=7) |
\0mnn |
八進(jìn)制0mnn代表的字符(0<=m<=3,0<=n<=7) |
\xhh |
十六進(jìn)制 0xhh所代表的字符 |
\uhhhh |
十六進(jìn)制 0xhhhh所代表的字符。注意,目前尚不支持CJK ExtB區(qū)漢字。 |
\t |
制表符('\u0009') |
\n |
換行('\u000A') |
\r |
回車('\u000D') |
\a |
響鈴符('\u0007') |
\e |
取消符Escape('\001B') |
\cx |
x所代表的控制字符 |
正則表達(dá)式字符串 |
匹配的字符串 |
XY |
X后面跟隨Y |
X|Y |
X或者Y |
(X) |
X作為分組表達(dá)式 |
正則表達(dá)式字符串 |
匹配的字符串 |
\n |
第n個(gè)匹配的分組 |
邊界字符 |
匹配的字符串 |
^ |
行首 |
$ |
行末 |
\b | 字符邊界 |
\B |
非字符邊界 |
\A |
輸入流的開始 |
\G |
上次匹配的結(jié)束處 |
\Z |
輸入流的結(jié)束,或者是最后一個(gè)行結(jié)束符,參見行結(jié)束符。 |
\z |
輸入流的結(jié)束 |
正則表達(dá)式字符串 |
匹配的字符串 |
X? |
X重復(fù)一次,或者不重復(fù) |
X* |
X重復(fù)0次或多次 |
X+ |
X重復(fù)1次或多次 |
X{n} |
X重復(fù)n次,不多也不少。 |
X{n,} |
X至少重復(fù)n次 |
X{n,m} |
X至少重復(fù)n次,至多重復(fù)m次。 |
正則表達(dá)式字符串子集 |
匹配的字符串 |
組合方式 |
[abc] |
字符a,b或c,包括 CJK ExtB 區(qū)漢字 |
簡單子集 |
[^abc] |
任意非a,b或c的字符。 |
排除 |
[a-zA-Z] | 從a到z,或者A到Z,包含a,z,A,Z。 |
區(qū)間 |
[a-d[m-p]] |
從a到d,或者m到p,等于[a-dm-p]。 |
聯(lián)合 |
[a-z&&[def]] |
d,e或者f。 |
交集 |
[a-z&&[^bc]] |
從a到z,除了b和c,等于[ad-z] |
扣除 |
[a-z&&[^m-p]] |
從a到z,并且不包括從m到p,等于[a-lq-z] |
扣除 |
邊界字符 |
匹配的字符串 |
. |
任意字符,可能匹配行結(jié)束符。 |
\d |
數(shù)字[0-9] |
\D | 非數(shù)字[^0-9] |
\s |
空白符[ \t\n\x0B\f\r] |
\S |
非空白符[^\s] |
\w |
單詞符,包含有字母和數(shù)字[a-zA-Z_0-9] |
\W |
非單詞符,不包含有字母和數(shù)字。 |
正則表達(dá)式字符串 |
匹配的字符串 |
名稱 |
塊名稱(\p{InXXX}) |
簡化通配符 |
標(biāo)準(zhǔn)Unicode塊,或者漢字列表 |
任意雙字節(jié)字符(漢字或全角符號(hào)) |
\p{InQuqnJiao} |
\E |
任意由GBK表示的漢字,不包括GB18030擴(kuò)展部分, 以及CJK ExtB區(qū)的漢字。 |
任意單字節(jié)字符 |
\p{InFQuanJiao} |
\~E |
任意單字節(jié)字符。 |
任意全角ASCII字符 |
\p{InQJAscii} |
\H |
標(biāo)準(zhǔn)HalfwidthandFullwidthForms塊 |
任意收錄在BIG5碼集中的雙字節(jié)字符 |
\p{InBig5} |
\I |
Big5可編碼雙字節(jié)字符 |
匹配未收錄在BIG5碼集中的雙字節(jié)字符 | \p{InFBig5} |
\~I |
非Big5可編碼雙字節(jié)字符 |
匹配任意漢字(不包括符號(hào)) |
\p{InHanziOrCJKExtB} |
\X |
任意漢字,包括GB18030擴(kuò)展部分。 |
匹配任意漢字(不包括符號(hào)) |
\p{InHanzi} |
\M |
任意漢字,不包括GB18030擴(kuò)展部分。 |
匹配非漢字的雙字節(jié)字符 |
\p{InFHanzi} |
\~M |
任意非漢字的雙字節(jié)字符, 包括GB18030擴(kuò)展部分。 |
地支字符 |
\p{InDiZhi} |
\U |
子丑寅卯辰巳午未申酉戌亥 |
匹配收錄在GB碼集中的雙字節(jié)字符 |
\p{InGB} |
\g |
收錄在GB碼集中的雙字節(jié)字符, 不包括GB18030擴(kuò)展部分。 |
匹配非收錄在GB碼集中的雙字節(jié)字符 |
\p{InFGB} |
\~g |
未收錄在GB碼集中的雙字節(jié)字符, 不包括GB18030擴(kuò)展部分。 |
匹配收錄在GBK碼集中的雙字節(jié)字符 |
\p{InGBK} |
\h |
收錄在GBK碼集中的雙字節(jié)字符, 不包括GB18030擴(kuò)展部分。 |
匹配非收錄在GBK碼集中的雙字節(jié)字符 |
\p{InFGBK} |
\~h |
未收錄在GBK碼集中的雙字節(jié)字符, 不包括GB18030擴(kuò)展部分。 |
大寫希臘字母 |
\p{InDaXila} |
\K |
ΑΒΓΔΕΖΗΘΙΚΛΜΝ ΞΟΠΡΣΤΥΦΧΨΩ |
日文片假名 |
\p{InPianJia} |
\j |
標(biāo)準(zhǔn)Katakana塊 |
日文平假名 |
\p{InPingJia} |
\J |
標(biāo)準(zhǔn)Hiragana塊 |
小寫希臘字母 |
\p{InXiaoXila} |
\k |
αβγδεζηθικλμν ξοπρστυφχψω |
數(shù)學(xué)符號(hào) |
\p{InMathe} |
\m |
±×÷∶∧∨∑∏∪∩∈∷√⊥∥∠⌒⊙ ∫∮≡≌≈∽∝≠≮≯≤≥∞∵∴ |
中文數(shù)字 |
\p{InCnDigit} |
\i |
〇一二三四五六七八九十百千萬億兆吉京 |
大寫中文數(shù)字 |
\p{InDaCnDigit} |
\N |
零壹貳叁肆伍陸柒捌玖拾佰仟萬億兆吉京 |
全角標(biāo)點(diǎn)符號(hào) |
\p{InQJBiaoDian} |
\o |
、。·ˉˇ¨〃々—~‖…‘’“”〔〕 〈〉《》「」『』〖〗【】!"'(), -.:;<=>?[]{|}`﹉﹊﹋﹌﹍﹎﹏﹐﹑﹒﹔﹕﹖﹗﹙﹚ ﹛﹜﹝﹞︵︶︹︺︿﹀︽︾﹁﹂﹃﹄ ︻︼︷︸︱︳︴ |
小寫俄文字母 |
\p{InXiaoEWen} |
\l |
абвгдеёжзийклмн опрстуфхцчшщъыьэюя |
大寫俄文字母 |
\p{InDaEWen} |
\R |
АБВГДЕЁЖЗИЙКЛМНО ПРСТУФХЦЧШЩЪЫЬЭЮЯ |
中文序號(hào) |
\p{InCnSN} |
\q |
ⅠⅡⅢⅣⅤⅥⅦⅧⅨⅩⅪⅫ ⅰⅱⅲⅳⅴⅵⅶⅷⅸⅹ 再加上Unicode標(biāo)準(zhǔn)EnclosedAlphanumerics塊 |
天干字符 |
\p{InTianGan} |
\T |
甲乙丙丁戊己庚辛壬癸 |
豎排標(biāo)點(diǎn)符號(hào) |
\p{InSPBiaoDian} |
\V |
︵︶︹︺︿﹀︽︾﹁﹂﹃﹄︻︼︷︸︱︳︴ |
拼音字符 |
\p{InPinyin} |
\y |
āáǎàēéěèīíǐìōóǒòūúǔùǖǘǚǜüêɑńňɡ GBK -> 0xA8A1- 0xA8C0 只是Unicode標(biāo)準(zhǔn)LatinExtended-A塊的一部分。 |
注音字符 |
\p{InZhuyin} |
\Y |
標(biāo)準(zhǔn)Bopomofo塊 |
制表字符 |
\p{InZhiBiao} |
\C |
標(biāo)準(zhǔn)BoxDrawing塊。 經(jīng)檢查發(fā)現(xiàn) textpro 的算法含有部分非標(biāo) 準(zhǔn)Unicode制表符:“∟∣≒≦≧⊿═”。 |
正則表達(dá)式字符串 |
匹配的字符串 |
\p{Lower} |
小寫字母[a-z] |
\p{Upper} |
大寫字母[A-Z] |
\p{ASCII} |
所有的ASCII字符[\x00-\x7F] |
\p{Alpha} |
大小寫字母[\p{Lower}\p{Upper}] |
\p{Digit} |
數(shù)字[0-9] |
\p{Alnum} |
字母數(shù)字符,包含大小寫字母和數(shù)字[\p{Alpha}\p{Digit}] |
\p{Punct} |
標(biāo)點(diǎn)符號(hào),!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~之一。 |
\p{Graph} |
可顯示字符[\p{Alnum}\p{Punct}] |
\p{Print} |
可打印字符[\p{Graph}] |
\p{Blank} |
空格或者制表符[ \t] |
\p{Cntrl} |
控制字符[\x00-\x1F\x7F |
\p{XDigit} |
十六進(jìn)制數(shù)字[0-9a-fA-F] |
\p{Space} |
空白符[ \t\n\x0B\f\r] |
塊 |
中文名稱(摘自Word XP) |
代碼區(qū)域 |
BasicLatin |
基本拉丁語 |
\u0000-\u007F |
Latin-1Supplement |
拉丁語-1 |
\u0080-\u00FF |
LatinExtended-A |
拉丁語擴(kuò)充-A |
\u0100-\u017F |
LatinExtended-Bound |
拉丁語擴(kuò)充-B |
\u0180-\u024F |
IPAExtensions |
國際音標(biāo)擴(kuò)充 |
\u0250-\u02AF |
SpacingModifierLetters |
進(jìn)格的修飾字符 |
\u02B0-\u02FF |
CombiningDiacriticalMarks |
組合用發(fā)音符 |
\u0300-\u036F |
Greek |
基本希臘語 |
\u0370-\u03FF |
Cyrillic |
西里爾語 |
\u0400-\u04FF |
Armenian |
\u0530-\u058F | |
Hebrew |
\u0590-\u05FF | |
Arabic |
\u0600-\u06FF | |
Syriac |
\u0700-\u074F | |
Thaana |
\u0780-\u07BF | |
Devanagari |
\u0900-\u097F | |
Bengali |
\u0980-\u09FF | |
Gurmukhi |
\u0A00-\u0A7F | |
Gujarati |
\u0A80-\u0AFF | |
Oriya |
\u0B00-\u0B7F | |
Tamil |
\u0B80-\u0BFF | |
Telugu |
\u0C00-\u0C7F | |
Kannada |
\u0C80-\u0CFF | |
Malayalam |
\u0D00-\u0D7F | |
Sinhala |
\u0D800-\uDFF | |
Thai |
\u0E00-\u0E7F | |
Lao |
\u0E80-\u0EFF | |
Tibetan |
藏語 |
\u0F00-\u0FFF |
Myanmar |
\u1000-\u109F | |
Georgian |
\u10A0-\u10FF | |
HangulJamo |
\u1100-\u11FF | |
Ethiopic |
\u1200-\u137F | |
Cherokee |
\u13A0-\u13FF | |
UnifiedCanadianAboriginalSyllabics |
\u1400-\u167F | |
Ogham |
\u1680-\u169F | |
Runic |
\u16A0-\u16FF | |
Khmer |
\u1780-\u17FF | |
Mongolian |
蒙古語 |
\u1800-\u18AF |
LatinExtendedAdditional |
\u1E00-\u1EFF | |
GreekExtended |
\u1F00-\u1FFF | |
GeneralPunctuation |
廣義標(biāo)點(diǎn) |
\u2000-\u206F |
SuperscriptsandSubscripts |
\u2070-\u209F | |
CurrencySymbols |
貨幣符號(hào) |
\u20A0-\u20CF |
CombiningMarksforSymbols |
\u20D0-\u20FF | |
LetterlikeSymbols |
類似字母的符號(hào) |
\u2100-\u214F |
NumberForms |
數(shù)字形式 |
\u2150-\u218F |
Arrows |
箭頭 |
\u2190-\u21FF |
MathematicalOperators |
數(shù)學(xué)運(yùn)算符 |
\u2200-\u22FF |
MiscellaneousTechnical |
零雜技術(shù)用符號(hào) |
\u2300-\u23FF |
ControlPictures |
\u2400-\u243F | |
OpticalCharacterRecognition |
\u2440-\u245F | |
EnclosedAlphanumerics |
帶括號(hào)的字母數(shù)字 |
\u2460-\u24FF |
BoxDrawing |
制表符 |
\u2500-\u257F |
BlockElements |
方塊圖形 |
\u2580-\u259F |
GeometricShapes |
幾何圖形 |
\u25A0-\u25FF |
MiscellaneousSymbols |
零雜丁貝符(示意符等) |
\u2600-\u26FF |
Dingbats |
\u2700-\u27BF | |
BraillePatterns |
\u2800-\u28FF | |
CJKRadicalsSupplement |
\u2E80-\u2EFF | |
KangxiRadicals |
\u2F00-\u2FDF | |
IdeographicDescriptionCharacters |
\u2FF0-\u2FFF | |
CJKSymbolsandPunctuation |
CJK符號(hào)和標(biāo)點(diǎn) |
\u3000-\u303F |
Hiragana |
平假名 |
\u3040-\u309F |
Katakana |
片假名 |
\u30A0-\u30FF |
Bopomofo |
注音 |
\u3100-\u312F |
HangulCompatibilityJamo |
\u3130-\u318F | |
Kanbun |
\u3190-\u319F | |
BopomofoExtended |
擴(kuò)展注音 |
\u31A0-\u31BF |
EnclosedCJKLettersandMonths |
帶括號(hào)的CJK字母及月份 |
\u3200-\u32FF |
CJKCompatibility |
CJK兼容字符 |
\u3300-\u33FF |
CJKUnifiedIdeographsExtensionA |
CJK統(tǒng)一漢字?jǐn)U展-A |
\u3400-\u4dBF |
CJKUnifiedIdeographs |
CJK統(tǒng)一漢字 |
\u4E00-\u9fAF |
YiSyllables |
\uA000-\uA48F | |
YiRadicals |
\uA490-\uA4CF | |
HangulSyllables |
\uAC00-\uD7A3 | |
HighSurrogates |
\uD800-\uDB7F | |
HighPrivateUseSurrogates |
\uDB80-\uDBFF | |
LowSurrogates |
\uDC00-\uDFFF | |
PrivateUse |
專用區(qū) |
\uE000-\uF8FF |
CJKCompatibilityIdeographs |
CJK兼容漢字 |
\uF900-\uFAFF |
AlphabeticPresentationForms |
\uFB00-\uFB4F | |
ArabicPresentationForms-A |
\uFB50-\uFDFF | |
CombiningHalfMarks |
\uFE20-\uFE2F | |
CJKCompatibilityForms |
CJK兼容形式 |
\uFE30-\uFE4F |
SmallFormVariants |
小寫變體 |
\uFE50-\uFE6F |
ArabicPresentationForms-Bound |
\uFE70-\ufeFF | |
Specials |
\uFFF0-\uFFFF | |
HalfwidthandFullwidthForms |
半形及全形字符 |
\uFF00-\uFFEF |
分類 |
全稱 |
說明 |
Cn |
UNASSIGNED | |
Lu |
UPPERCASE_LETTER | |
Ll |
LOWERCASE_LETTER | |
Lt |
TITLECASE_LETTER | |
Lm |
MODIFIER_LETTER | |
Lo |
OTHER_LETTER | |
Mn |
NON_SPACING_MARK | |
Me |
ENCLOSING_MARK | |
Mc |
COMBINING_SPACING_MARK | |
Nd |
DECIMAL_DIGIT_NUMBER | |
Nl |
LETTER_NUMBER | |
No |
OTHER_NUMBER | |
Zs |
SPACE_SEPARATOR | |
Zl |
LINE_SEPARATOR | |
Zp |
PARAGRAPH_SEPARATOR | |
Cc |
CNTRL | |
Cf |
FORMAT | |
Co |
PRIVATE_USE | |
Cs |
SURROGATE | |
Pd |
DASH_PUNCTUATION | |
Ps |
START_PUNCTUATION | |
Pe |
END_PUNCTUATION | |
Pc |
CONNECTOR_PUNCTUATION | |
Po |
OTHER_PUNCTUATION | |
Sm |
MATH_SYMBOL | |
Sc |
CURRENCY_SYMBOL | |
Sk |
MODIFIER_SYMBOL | |
So |
OTHER_SYMBOL | |
L |
LETTER | |
M |
MARK | |
N |
NUMBER | |
Z |
SEPARATOR | |
C |
CONTROL | |
P |
PUNCTUATION | |
S |
SYMBOL | |
LD |
LETTER_OR_DIGIT | |
L1 |
Latin-1 | |
all |
ALL | |
ASCII |
ASCII | |
Alnum |
字母數(shù)字(0-9,a-z,A-Z) | |
Alpha |
字母(a-z,A-Z) | |
Blank |
空格和制表符(' '|\t) | |
Cntrl |
控制字符,不可打印 | |
Digit |
數(shù)字(0-9) | |
Graph |
可打印且可視字母(例如空格' '是可打印的但不是可視字母,而 `a' 兩者都是。) | |
Lower |
小寫字母 | |
Print |
可打印字母(非控制字符) | |
Punct |
標(biāo)符號(hào)(字母、數(shù)字、控制、空白符以外的字母),如:!@#$%}{<>,./?[]等等。 | |
Space |
空白符(' ',\t,0x09,0x0A,0x0B,0x0C,0x0D,0x20) | |
Upper |
大寫字母 | |
XDigit |
十六進(jìn)制數(shù)字(0-9,a-f, A-F) |
特殊字符介紹 |
描述 |
\n |
換行 |
\b |
向前刪除一個(gè)字符。當(dāng)這個(gè)字符位于替換串之首時(shí),將刪除匹配串之前的一個(gè)字符。若匹配串位于行首,將使匹配串所在行與前一行相合并。 |
\d |
向后刪除一個(gè)字符。當(dāng)這個(gè)字符位于替換串之末時(shí),將刪除匹配串之后的一個(gè)字符。若匹配串位于行末,將使匹配串所在行與下一行相合并。 |
\e |
插入一個(gè)ESC字符 |
\t |
插入一個(gè)TAB字符 |
\n |
n代表查找正則表達(dá)式中的子表達(dá)式(組)。\1代表第一個(gè)子表達(dá)式,\2代表第二個(gè)子表達(dá)式,依次類推。\0代表整個(gè)匹配到的字符串。 |
\v |
大寫下一個(gè)字母 |
\U |
全部大寫以后的字母,直到碰到其它指示符為止。 |
\l |
小寫下一個(gè)字母 |
\L |
全部小寫以后的字母,直到碰到其它指示符為止。 |
\E |
取消所有的字母大小寫指示符。 |
eclipseME
http://eclipseme.org/updates/
Eclipse加速插件KeepResident
http://suif.stanford.edu/pub/keepresident/
MyEclipse J2EE開發(fā)插件,支持SERVLET/JSP/EJB/數(shù)據(jù)庫操縱等
www.myeclipseide.com
Properties Editor 編輯java的屬性文件,并可以自動(dòng)存盤為Unicode格式
http://propedit.sourceforge.jp/index_en.html
http://propedit.sourceforge.jp/eclipse/updates/
Colorer Take 為上百種類型的文件按語法著色
http://colorer.sourceforge.net/
XMLBuddy 編輯xml文件
www.xmlbuddy.com
Code Folding 加入多種代碼折疊功能(比eclipse自帶的更多)
http://www.coffee-bytes.com/servlet/PlatformSupport
Easy Explorer 從eclipse中訪問選定文件、目錄所在的文件夾
http://easystruts.sourceforge.net/
Fat Jar 打包插件,可以方便的完成各種打包任務(wù),可以包含外部的包等
http://fjep.sourceforge.net/
RegEx Test 測(cè)試正則表達(dá)式
http://brosinski.com/stephan/archives/000028.php
JasperAssistant 報(bào)表插件(強(qiáng),要錢的)
http://www.jasperassistant.com/
Jigloo GUI Builder JAVA的GUI編輯插件
http://cloudgarden.com/jigloo/
Profiler 性能跟蹤、測(cè)量工具,能跟蹤、測(cè)量BS程序
http://sourceforge.net/projects/eclipsecolorer/
AdvanQas 提供對(duì)if/else等條件語句的提示和快捷幫助(自動(dòng)更改結(jié)構(gòu)等)
http://eclipsecolorer.sourceforge.net/advanqas/index.html
Log4E Log4j插件,提供各種和Log4j相關(guān)的任務(wù),如為方法、類添加一個(gè)logger等
http://log4e.jayefem.de/index.php/Main_Page
VSSPlugin VSS插件
http://sourceforge.net/projects/vssplugin
Implementors 提供跳轉(zhuǎn)到一個(gè)方法的實(shí)現(xiàn)類,而不是接中的功能(實(shí)用!)
http://eclipse-tools.sourceforge.net/implementors/
Call Hierarchy 顯示一個(gè)方法的調(diào)用層次(被哪些方法調(diào),調(diào)了哪些方法)
http://eclipse-tools.sourceforge.net/call-hierarchy/index.html
EclipseTidy 檢查和格式化HTML/XML文件
http://eclipsetidy.sourceforge.net/
Checkclipse 檢查代碼的風(fēng)格、寫法是否符合規(guī)范
http://www.mvmsoft.de/content/plugins/checkclipse/checkclipse.htm
Hibernate Synchronizer Hibernate插件,自動(dòng)映射等
http://www.binamics.com/hibernatesync/
spring updatesite 插件
http://springide.org/updatesite/
VeloEclipse Velocity插件
http://propsorter.sourceforge.net/
EditorList 方便的列出所有打開的Editor
http://editorlist.sourceforge.net/
MemoryManager 內(nèi)存占用率的監(jiān)視
http://cloudgarden.com/memorymanager/
Eclipse的游戲插件
http://eclipse-games.sourceforge.net/
JBoss-IDE
http://jboss.sourceforge.net/jbosside/updates/
自動(dòng)反編譯class,安裝后要設(shè)定class文件缺省關(guān)聯(lián)到j(luò)ode
http://www.technoetic.com/eclipse/update
jigloo swing/sw設(shè)計(jì)工具,里面自帶的form/anchor布局很好用!
http://cloudgarden.soft-gems.net/update-site/
jinto的資源文件編輯工具,同時(shí)編輯多種語言,而且自動(dòng)轉(zhuǎn)換成iso8859-1編碼。很好用!
http://www.guh-software.de/eclipse/
, '2', 4.0
. <%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件的建立、檢查與刪除</title>
</head>
<body>
<%
String path=request.getRealPath("");
//out.println(path);
File f=new File(path,"File.txt");
//out.println(f);
//out.println(f.exists());
//檢查File.txt是否存在
if(f.exists()){
f.delete();//刪除File.txt文件
out.println(path + "\\File.txt 存在,已刪除。");
}else{
f.createNewFile();//在當(dāng)前目錄下建立一個(gè)名為File.txt的文件
out.println(path + "\\File.txt 不存在,已建立。");//輸出目前所在的目錄路徑
}
%>
目錄的建立/檢查與刪除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>目錄的建立/檢查與刪除</title>
</head>
<body>
<%
String path=request.getRealPath("");
path=path + "\\Sub";//將要建立的目錄路徑
File d=new File(path);//建立代表Sub目錄的File對(duì)象,并得到它的一個(gè)引用
if(d.exists()){//檢查Sub目錄是否存在
d.delete();
("Sub目錄存在,已刪除");
}else{
d.mkdir();//建立Sub目錄
out.println("Sub目錄不存在,已建立");
}
%>
</body>
</html>
如何在JSP中處理虛擬目錄
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>JSP中如何處理虛擬目錄</title>
</head>
<body>
取得虛擬目錄對(duì)應(yīng)的磁盤路徑<br>
Web站點(diǎn)主目錄的位置為<font color=#ff0000><%=request.getRealPath("/")%></font><br>
JSP網(wǎng)頁所在的目錄位置<font color=#ff0000><%=request.getRealPath("./")%></font><br>
JSP網(wǎng)頁所在目錄上一層目錄的位置<font color=#ff0000><%=request.getRealPath("../")%></font><br>
</body>
</html>
文件屬性的取得
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>
<html>
<head>
<title>文件屬性的取得</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File f=new File(path,"ReadData.txt");
if(f.exists()){
%>
<%=f.getName()%>的屬性如下:<br><br>
文件長度為:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目錄":"不是目錄"%><br>
<%=f.canRead()?"可讀取":"不可讀取"%><br>
<%=f.canWrite()?"可寫入":"不可寫入"%><br>
<%=f.isHidden()?"是隱藏文件":"不是隱藏文件"%><br>
文件的最后修改日期為:<%=new Date(f.lastModified())%><br>
<%
}else{
f.createNewFile();//在當(dāng)前目錄下建立一個(gè)名為ReaData.txt的文件
%>
<%=f.getName()%>的屬性如下:<br><br>
文件長度為:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%><br>
<%=f.isDirectory()?"是目錄":"不是目錄"%><br>
<%=f.canRead()?"可讀取":"不可讀取"%><br>
<%=f.canWrite()?"可寫入":"不可寫入"%><br>
<%=f.isHidden()?"是隱藏文件":"不是隱藏文件"%><br>
文件的最后修改日期為:<%=new Date(f.lastModified())%><br>
<%
}
%>
</body>
</html>
取出目錄中文件的方法
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>取出目錄中文件的方法--列出目錄中的文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
File d=new File(path);//建立當(dāng)前目錄中文件的File對(duì)象
File list[]=d.listFiles();//取得代表目錄中所有文件的File對(duì)象數(shù)組
out.println("<font color=#ff0000>" + path + "目錄下的文件:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isFile()){
out.println(list<I>.getName() + "<br>");
}
}
out.println("<br><font color=#ff0000>" + path + "目錄下的目錄:</font><br>");
for(int i=0;i<list.length;i++){
if(list<I>.isDirectory()){
out.println(list<I>.getName() + "<br>");
}
}
%>
</body>
</html>
判斷是否為空白文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>判斷是否為空白文件</title>
</head>
<body>
<%
String path=request.getRealPath("/");
out.println(path);
FileReader fr=new FileReader(path + "\\AtEnd.txt");//建立FileReader對(duì)象,并實(shí)例化為fr
//對(duì)FileReader類生成的對(duì)象使用read()方法,可以從字符流中讀取下一個(gè)字符。
if(fr.read()==-1)//判斷是否已讀到文件的結(jié)尾
{
out.print("AtEnd.txt文件中沒有數(shù)據(jù)<br>");
}else{
out.println("AtEnd.txt文件中有數(shù)據(jù)");
}
fr.close();
%>
</body>
</html>
<B>讀取所有的文件數(shù)據(jù)</B>
<ccid_nobr>
<table width="400" border="1" cellspacing="0" cellpadding="2"
bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center">
<tr>
<td bgcolor="e6e6e6" class="code" style="font-size:9pt">
<pre><ccid_code> <%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>
<html>
<head>
<title>讀取所有的文件數(shù)據(jù)</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
//關(guān)鍵在于讀取過程中,要判斷所讀取的字符是否已經(jīng)到了文件的末尾,并且這個(gè)字符是不是文件中的斷行符,即判斷該字符值是否為13
。
int c=fr.read();//從文件中讀取一個(gè)字符
//判斷是否已讀到文件結(jié)尾
while(c!=-1){
out.print((char)c);//輸出讀到的數(shù)據(jù)
c=fr.read();//從文件中繼續(xù)讀取數(shù)據(jù)
if(c==13){//判斷是否為斷行字符
out.print("<br>");//輸出分行標(biāo)簽
fr.skip(1);//略過一個(gè)字符
/c=fr.read();//讀取一個(gè)字符
}
}
fr.close();
%>
</body>
</html>
一行一行讀取數(shù)據(jù)
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>文件讀取</title>
</head>
<body>
<%
String path=request.getRealPath("");//取得當(dāng)前目錄的路徑
FileReader fr=new FileReader(path + "\\file\\inc\\t.txt");//建立FileReader對(duì)象,并實(shí)例化為fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader對(duì)象,并實(shí)例化為br
String Line=br.readLine();//從文件讀取一行字符串
//判斷讀取到的字符串是否不為空
while(Line!=null){
out.println(Line + "<br>");//輸出從文件中讀取的數(shù)據(jù)
Line=br.readLine();//從文件中繼續(xù)讀取一行數(shù)據(jù)
}
br.close();//關(guān)閉BufferedReader對(duì)象
fr.close();//關(guān)閉文件
%>
</body>
</html>
略過文件中的字符不讀取
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>略過字節(jié)不讀取</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileReader fr=new FileReader(path + "\\ReadData.txt");
fr.skip(2);//跳過2個(gè)字節(jié)
int c=fr.read();//讀取一個(gè)字節(jié)
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>
</body>
</html>
將數(shù)據(jù)寫入文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>將數(shù)據(jù)寫入文件</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");//建立FileWriter對(duì)象,并實(shí)例化fw
//將字符串寫入文件
fw.write("大家好!");
fw.write("本書是《JSP編程技巧》");
fw.write("請(qǐng)多多指教!");
fw.write("email:stride@sina.com");
fw.close();
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);//建立BufferedReader對(duì)象,并實(shí)例化為br
String Line=br.readLine();
//讀取一行數(shù)據(jù)
out.println(Line + "<br>");
br.close();//關(guān)閉BufferedReader對(duì)象
fr.close();
%>
</body>
</html>
將寫入文件的數(shù)據(jù)分行
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>將寫入文件的數(shù)據(jù)分行</title>
</head>
<body>
<%
String path=request.getRealPath(".");
FileWriter fw=new FileWriter(path + "\\WriteData.txt");
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("本書是《JSP編程技巧》。");
bw.newLine();//斷行
bw.write("請(qǐng)多多指教!");
bw.newLine();//斷行
bw.write("email: stride@sina.com");
bw.flush();//將數(shù)據(jù)更新至文件
fw.close();//關(guān)閉文件流
out.println("寫入文件內(nèi)容為:<br>");
FileReader fr=new FileReader(path + "\\WriteData.txt");
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//讀取一行數(shù)據(jù)
while(Line!=null){
out.println(Line + "<br>");
Line=br.readLine();
}
fr.close();
%>
</body>
</html>
如何將數(shù)據(jù)追加寫入到文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>
<html>
<head>
<title>將寫入文件的數(shù)據(jù)分行</title>
</head>
<body>
<%
%>
</body>
</html></I></I></I></>