2005年10月28日


Flickr Photo


Flickr Photo


Flickr Photo


Flickr Photo

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

2005年10月26日

eclipse插件安装起来很简单,只要把插件解压后拷贝到eclipse目录下覆盖plugins文件夹就可以了,不过需要注意一下,安装后有可能插件不显示,解决方法如下:



  • 方法一: 删除整个目录/eclipse/configuration/org.eclipse.update/,重启Eclipse
  • 方法二: 在启动Eclipse时带上 -clean参数
      如:d:\eclipse\eclipse.exe -clean

  • 方法三:  如果Eclipse启动找不到插件了,解决办法: 在/configuration/config.ini文件中加入一行
      osgi.checkConfiguration=true
      这样它会寻找并安装插件,找到后可以把那行再注释掉,这样以后每次启动就不会因寻找插件而显得慢了。
      

我常用的方法是第三种。



为了便于管理众多插件,建议用links方式安装各种eclipse插件
  
  Eclipse基础--使用links方式安装Eclipse插件
  
  eclispe想必大家都很熟悉了,一般来说,eclipse插件都是安装在plugins目录下。不过这样一来,当安装了许多插件之后,eclipse变的很大,最主要的是不便于更新和管理众多插件。用links方式安装eclipse插件,可以解决这个问题。
  
  当前配置XP SP1,eclipse3.0.1
  
  现在假设我的eclipse安装目录是D:\eclipse,待安装插件目录是D:\plug-in ,我将要安装LanguagePackFeature(语言包)、emf-sdo-xsd-SDK、GEF-SDK、Lomboz这四个插件。
  
  先把这四个插件程序全部放在D:\plug-in目录里,分别解压。如Lomboz3.0.1.zip解压成Lomboz3.0.1目录,这个目录包含一个plugins目录,要先在Lomboz3.0.1目录中新建一个子目录eclipse,然后把plugins目录移动到刚建立的eclipse 目录中,即目录结构要是这样的:D:\plug-in\Lomboz3.0.1\eclipse\plugins
  
  Eclipse 将会到指定的目录下去查找 eclipse\features 目录和eclipse\plugins 目录,看是否有合法的功能部件和(或)插件。也就是说,目标目录必须包含一个 \eclipse 目录。如果找到,附加的功能部件和插件在运行期配置是将是可用的,如果链接文件是在工作区创建之后添加的,附加的功能部件和插件会作为新的配置变更来处理。
  
  其它压缩文件解压后若已经包含eclipse\plugins目录,则不需要建立eclipse目录。
  
  然后在 eclipse安装目录D:\eclipse目录中建立一个子目录links,在links目录中建立一个link文件,比如 LanguagePackFeature.link,改文件内容为 path=D:/plug-in/LanguagePackFeature 即这个link文件要对应一个刚解压后的插件目录。
  
  说明:
  
  1. 插件可以分别安装在多个自定义的目录中。
  
  2. 一个自定义目录可以安装多个插件。
  
  3. link文件的文件名及扩展名可以取任意名称,比如ddd.txt,myplugin都可以。
  
  4. link文件中path=插件目录的path路径分隔要用\\或是/
  
  5. 在links目录也可以有多个link文件,每个link文件中的path参数都将生效。
  
  6. 插件目录可以使用相对路径。
  
  7. 可以在links目录中建立一个子目录,转移暂时不用的插件到此子目录中,加快eclipse启动。
  
  8. 如果安装后看不到插件,把eclipse 目录下的configuration目录删除,重启即可。

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

2005年10月25日

用AJAX跟踪Google Adsense广告点击



功能



  1. 可以完整详细地获得每一个用户点击广告的数据。包括点击时间用户的IP页面来源地址被点击的广告网站地址,如果你的站点上保存了用户cookie的话,甚至可以查询到是哪位用户点了你的广告
  2. 用纯客户端javascript代码和AJAX技术实现点击监听和向服务端发送点击数据,服务端我用的是ASP脚本,只是用来保存点击数据和提供浏览器端的点击查询,可以更换为其他服务端脚本,如PHP,JSP等
  3. 数据保存方式为了简单,我用纯text文本保存,一行保存一条数据,数据字段用逗号分隔,这样方便用户将这个文本另存为csv格式,csv就能用excel打开了。
  4. 查看广告点击数据可设访问密码

安装和使用



  1. 下载这个文件解压出里面的adLog.asp文件
  2. 用记事本打开adLog.asp找到如下几行:

    Const TextFile = “adLog.txt” ‘保存点击数据的text文件,是相对路径,可以修改
    Const AccessPassword = “adLog” ‘查看点击时的访问密码,可以自行设定,如果无需身份认证,请将AccessPassword值改为”"即可
    Const SessionName = “google_ad_logger” ‘Session名称,用来保存访问密码到指定Session中
    Const WebCharset = “utf-8″ ‘网站的编码类型,如果是GB-2312,请自行修改
    Const UserName = “username” ‘用户名cookie,如果你的站没有用户cookie,就不用管了
    可以根据自己实际需要修改其值
  3. 修改完毕后将文件上传到你的web站点上,任何路径下都可以。这里注意:如果你的编码是gb-2312,请将文件用记事本打开,并选择另存为,将编码改回为ANSI。
  4. 修改你投放了google广告的页面文件,将以下代码插入你的页面任意位置:


    将其中的页面路径修改为你自己实际的地址
  5. 安装完毕以后页面就自动开始跟踪广告点击了
  6. 查看点击数据你可以上ftp直接下载你指定的文本文件查看,或者访问http://www.example.com/adlog.asp

技术原理


其实这也不是什么高深技术,原理及其简单,主要核心功能都是在客户端javascript中。



  • 通过查看发现google的广告代码全部放在一个iframe中。所以首先通过document.getElementsByTagName(“iframe”)得到页面中所有iframe标签的元素集保存到一个数组中
  • 然后遍历数组检查iframe.src值是否包含有”googlesyndication.com”这串字符串,如果有就认为这个iframe是google的广告显示iframe
  • 得到google显示广告的iframe后给这个iframe增加一个onfocus事件,这个事件就是当元素获得焦点时触发的事件
  • 在onfocus事件中检查window.status的值,也就是状态栏显示的字符串,如果匹配”go to”和”键连至”这几个字符串就提取中网址地址,这个地址就认为是被点击的广告网址
  • 利用AJAX立即将用户的点击数据POST到服务端纪录下来,这里的AJAX无需再响应服务端传回的数据了,只管发送出去即可

 


几个核心代码



  • 编写过windows程序的朋友一定知道微软的Visual Stdio中包含有一个Spy的小工具,这个小工具中就有一个功能用来监听某个窗口句柄的所有触发事件,用起来很爽,我在写这个广告纪录器时也自己实现了一个网页上用的Spy,代码如下:





    我就是用这种方法查看iframe上触发的事件,查看后发现鼠标单击iframe时能接收到的事件中有onbeforeactivate、onactivate、onfocusin、onfocus这四个,我就挑了onfocus来监听用户点击的
  • ajax部分我用的是XHConn组件,小巧灵活简单,很好使。
  • 前面讲解安装时我特意说过包含js的代码可以放在网页的任意位置,这里我用的是一个称作domFunction的js组件,这个组件可以实现循环查询DOM对象,直到发现DOM装载入页面并有效后再执行代码,相当于document.onload事件的作用,google adsense的广告有时候会显示很慢,用了这个Dom检查程序就可以保证每次页面装载都能查找到google的iframe,万无一失,也方便了用户添加代码时无需考虑位置的影响了。
  • 按理,这个程序应该写成一个asp外加一个js两个文件,但是看了Andy兄介绍的单页面应用程序(Single Page Application这篇文章,很是欣赏,所以特意将两个文件合写到一个文件中了
  • 服务端保存和读取文本文件的内容时,我用的分别是FSO和ADODB.Stream,如果你的站点不支持这些组件,请和我联系,我改写其他方式

遗憾



  • 最遗憾的是这个程序只能用在IE下启作用,Firefox下无法跟踪用户点击操作,原因是Firefox中ifrmae根本触发不了任何用户操作事件,去Mozilla上查看资料,官方说明了用document.getElementById(“iframe”).contentWindow这个对象,但是我尝试后还是毫无作用,只好作罢,等待高人解决。
  • 最惭愧的是我怎么也找不到在onfocus事件中判断用户鼠标左右键的方法,在iframe上点击鼠标右键也会触发事件的,程序会被认为一次有效的用户点击,这个问题一定要改改的。

Demo和下载


如果想立即查看下程序实际运行,我特意提供了一个demo文件:http://www.duduwolf.com/test/adLogDemo.asp,这个文件没有设访问密码,任何人都能查看点击数据,你也可以通过装载

这串代码立即从你的网站上实现点击跟踪,只不过点击后的数据是保存在我的网站上并且是公开的。
下载源文件:Google Adsense Click Logger
在线查看源代码:查看源代码(utf-8,如果显示乱码请修改当前页面编码)



这个程序我自己用了好几天了,迟迟没有发布出来就是担心大量应用后google估计就会修改google adsense代码了,还有就是我不知道这样做是不是违背了google广告的保留条款,仔细查看后发现有这样一条


Google 严禁以任何手段人为提高点击次数或网页展示次数,并通过工程系统和人工分析对行为进行密切监控。

 


所以希望大家只是拿来当技术研究,切勿长时间靠这个跟踪客户点击,虽然目前这个程序不影响任何adsense投放和点击后的动作和行为,但是如果有一天google的工作人员亲自上你的站点研究代码就全暴露了。我blog上的数据也统计了好几天,基本和google提供的统计数据差不多,因为我的blog上有用户留言的cookie,所以我特意保存了用户名,想看看每天都是谁在点击我的广告,统计后发现点击我广告的人都没在blog中留言,在blog中留言保存了cookie的用户从来不点击广告

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

AJAX基础教程


  这篇文章将带您浏览整个AJAX的基本概貌,并展示两个简单的例子让您轻松上路.

  什么是 AJAX?
  AJAX (异步 JavaScript 和 XML) 是个新产生的术语,专为描述JavaScript的两项强大性能.这两项性能在多年来一直被网络开发者所忽略,直到最近Gmail, Google suggest和google Maps的横空出世才使人们开始意识到其重要性.

  这两项被忽视的性能是:
  无需重新装载整个页面便能向服务器发送请求.
  对XML文档的解析和处理.

步骤 1 – “请!” — 如何发送一个HTTP请求

  为了用JavaScript向服务器发送一个HTTP请求, 需要一个具备这种功能的类实例. 这样的类首先由Internet Explorer以ActiveX对象引入, 被称为XMLHTTP. 后来Mozilla, Safari 和其他浏览器纷纷仿效, 提供了XMLHttpRequest类,它支持微软的ActiveX对象所提供的方法和属性.

  因此, 为了创建一个跨浏览器的这样的类实例(对象), 可以应用如下代码:

if (window.XMLHttpRequest) { // Mozilla, Safari, …
    http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) { // IE
    http_request = new ActiveXObject(“Microsoft.XMLHTTP”);
}

  (上例对代码做了一定简化,这是为了解释如何创建XMLHTTP类实例. 实际的代码实例可参阅本篇步骤3.)

  如果服务器的响应没有XML mime-type header,某些Mozilla浏览器可能无法正常工作. 为了解决这个问题, 如果服务器响应的header不是text/xml,可以调用其它方法修改该header.

http_request = new XMLHttpRequest();
http_request.overrideMimeType(‘text/xml’);

  接下来要决定当收到服务器的响应后,需要做什么.这需要告诉HTTP请求对象用哪一个JavaScript函数处理这个响应.可以将对象的onreadystatechange属性设置为要使用的JavaScript的函数名,如下所示:

http_request.onreadystatechange = nameOfTheFunction;

  注意:在函数名后没有括号,也无需传递参数.另外还有一种方法,可以在扉页(fly)中定义函数及其对响应要采取的行为,如下所示:

http_request.onreadystatechange = function(){
    // do the thing
};

  在定义了如何处理响应后,就要发送请求了.可以调用HTTP请求类的open()和send()方法, 如下所示:

http_request.open(‘GET’, ’http://www.example.org/some.file’, true);
http_request.send(null);

  open()的第一个参数是HTTP请求方式 – GET, POST, HEAD 或任何服务器所支持的您想调用的方式. 按照HTTP规范,该参数要大写;否则,某些浏览器(如Firefox)可能无法处理请求.有关HTTP请求方法的详细信息可参考http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html W3C specs
  第二个参数是请求页面的URL.由于自身安全特性的限制,该页面不能为第三方域名的页面.同时一定要保证在所有的页面中都使用准确的域名,否则调用open()会得到”permission denied”的错误提示.一个常见的错误是访问站点时使用domain.tld,而当请求页面时,却使用www.domain.tld.
  第三个参数设置请求是否为异步模式.如果是TRUE, JavaScript函数将继续执行,而不等待服务器响应.这就是”AJAX”中的”A”.
  如果第一个参数是”POST”,send()方法的参数可以是任何想送给服务器的数据. 这时数据要以字符串的形式送给服务器,如下所示:

name=value&anothername=othervalue&so=on 


步骤 2 – “收到!” — 处理服务器的响应

  当发送请求时,要提供指定处理响应的JavaScript函数名.

http_request.onreadystatechange = nameOfTheFunction; 

  我们来看看这个函数的功能是什么.首先函数会检查请求的状态.如果状态值是4,就意味着一个完整的服务器响应已经收到了,您将可以处理该响应.

if (http_request.readyState == 4) {
    // everything is good, the response is received
} else {
    // still not ready
}

  readyState的取值如下:
  0 (未初始化)
  1 (正在装载)
  2 (装载完毕)
  3 (交互中)
  4 (完成)

  接着,函数会检查HTTP服务器响应的状态值. 完整的状态取值可参见 W3C site. 我们着重看值为200 OK的响应.

if (http_request.status == 200) {
    // perfect!
} else {
    // there was a problem with the request,
    // for example the response may be a 404 (Not Found)
    // or 500 (Internal Server Error) response codes
}

  在检查完请求的状态值和响应的HTTP状态值后, 您就可以处理从服务器得到的数据了.有两种方式可以得到这些数据:

http_request.responseText – 以文本字符串的方式返回服务器的响应 
http_request.responseXML – 以XMLDocument对象方式返回响应.处理XMLDocument对象可以用JavaScript DOM函数 


步骤 3 – “万事俱备!” – 简单实例

  我们现在将整个过程完整地做一次,发送一个简单的HTTP请求. 我们用JavaScript请求一个HTML文件, test.html, 文件的文本内容为”I’m a test.”.然后我们”alert()”test.html文件的内容.


    var http_request = false;
    function makeRequest(url) {

        http_request = false;

        if (window.XMLHttpRequest) { // Mozilla, Safari,…
            http_request = new XMLHttpRequest();
            if (http_request.overrideMimeType) {
                http_request.overrideMimeType(‘text/xml’);
            }
        } else if (window.ActiveXObject) { // IE
            try {
                http_request = new ActiveXObject(“Msxml2.XMLHTTP”);
            } catch (e) {
                try {
                    http_request = new ActiveXObject(“Microsoft.XMLHTTP”);
                } catch (e) {}
            }
        }

        if (!http_request) {
            alert(‘Giving up :( Cannot create an XMLHTTP instance’);
            return false;
        }
        http_request.onreadystatechange = alertContents;
        http_request.open(‘GET’, url, true);
        http_request.send(null);

    }

    function alertContents() {

        if (http_request.readyState == 4) {
            if (http_request.status == 200) {
                alert(http_request.responseText);
            } else {
                alert(‘There was a problem with the request.’);
            }
        }

    }

    style=”cursor: pointer; text-decoration: underline”
    onclick=”makeRequest(‘test.html’)”>
        Make a request


  本例中:
  用户点击浏览器上的”请求”链接;
  接着函数makeRequest()将被调用.其参数 – HTML文件test.html在同一目录下;
  这样就发起了一个请求.onreadystatechange的执行结果会被传送给alertContents();
  alertContents()将检查服务器的响应是否成功地收到,如果是,就会”alert()”test.html文件的内容.

步骤 4 – “X-文档” — 处理XML响应

  在前面的例子中,当服务器对HTTP请求的响应被收到后,我们会调用请求对象的reponseText属性.该属性包含了test.html文件的内容.现在我们来试试responseXML属性.

  首先,我们新建一个有效的XML文件,后面我们将使用这个文件.该文件(test.xml)源代码如下所示:



    I’m a test.

  在该脚本中,我们只需修改请求部分:


onclick=”makeRequest(‘test.xml’)”>

  接着,在alertContents()中,我们将alert()的代码alert(http_request.responseText);换成:

  var xmldoc = http_request.responseXML;
  var root_node = xmldoc.getElementsByTagName(‘root’).item(0);
  alert(root_node.firstChild.data);


  这里,我们使用了responseXML提供的XMLDocument对象并用DOM方法获取存于XML文件中的内容.

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

2005年10月20日

Oracle 默认的XML DB把HTTP的默认端口设为8080,这是一个太常用的端口了,很多别的WebServer都会使用这个端口,所以我们需要修改它。方法三种:
1。dbca,选择你的数据库,然后Standard Database Features->Customize->Oracle XML DB option,进入这个画面你应该就知道怎么改了。

2。OEM console,在XML Database 的配置里面修改

3。用oracle提供的包:
– 把HTTP/WEBDAV端口从8080改到8081
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
‘/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()’,8081))
/

– 把FTP端口从2100改到2111
SQL> call dbms_xdb.cfg_update(updateXML(dbms_xdb.cfg_get(),
‘/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()’,2111))
/

SQL> commit;

SQL> exec dbms_xdb.cfg_refresh;


– 检查修改是否已经成功
SQL> set long 100000
SQL> set pagesize 1000
SQL> select dbms_xdb.cfg_get from dual;


以下是我使用的方法


SQL> — Change the HTTP/WEBDAV port from 8080 to 8081
  SQL> call dbms_xdb.cfg_update(updateXML(
    2        dbms_xdb.cfg_get()
    3      , ‘/xdbconfig/sysconfig/protocolconfig/httpconfig/http-port/text()’
    4      , 8081))
    5  /

  Call completed.


  SQL> — Change the FTP port from 2100 to 2111
  SQL> call dbms_xdb.cfg_update(updateXML(
    2         dbms_xdb.cfg_get()
    3       , ‘/xdbconfig/sysconfig/protocolconfig/ftpconfig/ftp-port/text()’
    4       , 2111))
    5  /

  Call completed.


  SQL> COMMIT;

  Commit complete.


  SQL> EXEC dbms_xdb.cfg_refresh;

  PL/SQL procedure successfully completed.


  SQL> — Verify the change
  SQL> set long 100000
  SQL> set pagesize 9000
  SQL> SELECT dbms_xdb.cfg_get FROM dual;

CFG_GET
——————————————————————————–
本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

所需软件


apache-tomcat-5.5.12.exe   (http://tomcat.apache.org/download-55.cgi


mod_jk-1.2.14-apache-2.0.54.so  (http://tomcat.apache.org/download-connectors.cgi


apache_2.0.55-win32-x86-no_ssl.msi  (http://httpd.apache.org/)


1.首先正确安装好 apache和tomcat


2.在Apache HTTP服务器中加入mod_jk-1.2.14-apache-2.0.54.so模块


    拷贝mod_jk-1.2.14-apache-2.0.54.so至Apache 安装目录下的 /modules 目录中


3. 创建workers.properties文件



以下是我的workers.properties


workers.tomcat_home=D:\Program Files\Apache Group\Tomcat 5.5
#让mod_jk模块知道Tomcat
workers.java_home=C:\Program Files\Java\jre1.5.0_02
#让mod_jk模块知道j2sdk
ps=\
#指定文件路径分割符
worker.list=worker1
worker.worker1.port=8009
#工作端口,若没占用则不用修改
worker.worker1.host=localhost
#Tomcat服务器的地址
worker.worker1.type=ajp13
#类型
worker.worker1.lbfactor=1
#负载平衡因数


workers.properties文件的属性




























属 性 描 述
workers.tomcat_home 指定Tomcat服务器的根目录
workers.java_home 指定JDK的根目录
worker.list 指定Tomcat服务器工作名单
worker.worker1.port 指定Tomcat服务器使用的JK 端口
worker.worker1.host 指定Tomcat服务器的IP地址
worker.worker1.type 指定Tomcat服务器 与Apache之间的通信协议
worker.worker1.lbfactor 指定负载平衡因数(Load Balance Factor)。 只有在使用了负载平衡器 (LoadBalancer)的情况下, 这个属性才有意义

4. 修改Apache的配置文件httpd.conf



打开/conf/httpd.conf文件,在其末尾加入以下内容:


# Using mod_jk2.dll to redirect dynamic calls to Tomcat
LoadModule  jk_module modules\mod_jk-1.2.14-apache-2.0.54.so
JkWorkersFile “conf\workers.properties”
JkLogFile “logs\mod_jk2.log”
JkLogLevel debug
JkMount /*.jsp  worker1
JkMount /web/*  worker1


# JK插件的相关属性
#
# 属 性 描 述
# LoadModule 指定加载的JK插件
# JkWorkersFile 指定JK插件的工作文件
# JkLogFile 指定JK插件使用的日志文件, 在实际配置中,可以通过查看这个日志文件, 来跟踪JK插件的运行过程, 这对排错很有用
# JkLogLevel 指定JK插件的日志级别, 可选值包括debug、info和error等
# JkMount 指定JK插件处理的URL映射信息
#
# JkMount用来指定URL映射信息,”JkMount /*.jsp worker1″表示”/*.jsp”形式的URL都由worker1代表的Tomcat服务器来处理;”JkMount /helloapp/* worker1″表示访问helloapp应用的URL都由worker1来处理。




5. 测试配置



重启Tomcat服务器和Apache服务器,通过浏览器访问http://localhost/index.jsp,如果出现Tomcat的默认主页,说明配置已经成功。


如果配置有误,可以查看JK插件生成的日志信息,它有助于查找错误原因。在Apache的配置文件httpd.conf中设定该日志文件的存放位置为/logs/mod_jk2.log

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”

2005年10月13日

java文件操作大全

文件的建立/检查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“”);
//out.println(path);
File f=new File(path,”File.txt”);
//out.println(f);
//out.println(f.exists());

if(f.exists()){//检查File.txt是否存在
f.delete();//删除File.txt文件
out.println(path + ”\\File.txt 存在,已删除。”);
}else{
f.createNewFile();//在当前目录下建立一个名为File.txt的文件
out.println(path + ”\\File.txt 不存在,已建立。”);//输出目前所在的目录路径
}
%>

目录的建立/检查与删除
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“”);
path=path + ”\\Sub”;//将要建立的目录路径
File d=new File(path);//建立代表Sub目录的File对象,并得到它的一个引用
if(d.exists()){//检查Sub目录是否存在
d.delete();
out.println(“Sub目录存在,已删除”);
}else{
d.mkdir();//建立Sub目录
out.println(“Sub目录不存在,已建立”);
}
%>




如何在JSP中处理虚拟目录
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





取得虚拟目录对应的磁盘路径

Web站点主目录的位置为<%=request.getRealPath("/")%>


JSP网页所在的目录位置<%=request.getRealPath("./")%>

JSP网页所在目录上一层目录的位置<%=request.getRealPath("../")%>





文件属性的取得
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.Date,java.io.*"%>





<%
String path=request.getRealPath(“/”);
File f=new File(path,”ReadData.txt”);
if(f.exists()){
%>
<%=f.getName()%>的属性如下:


文件长度为:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%>

<%=f.isDirectory()?"是目录":"不是目录"%>

<%=f.canRead()?"可读取":"不可读取"%>

<%=f.canWrite()?"可写入":"不可写入"%>

<%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%>

文件的最后修改日期为:<%=new Date(f.lastModified())%>

<%
}else{
f.createNewFile();//在当前目录下建立一个名为ReaData.txt的文件
%> 
<%=f.getName()%>的属性如下:


文件长度为:<%=f.length()%>
<%=f.isFile()?"是文件":"不是文件"%>

<%=f.isDirectory()?"是目录":"不是目录"%>

<%=f.canRead()?"可读取":"不可读取"%>

<%=f.canWrite()?"可写入":"不可写入"%>

<%=f.isHidden()?"是隐藏文件":"不是隐藏文件"%>

文件的最后修改日期为:<%=new Date(f.lastModified())%>

<%
}
%>




取出目录中文件的方法
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“/”);
File d=new File(path);//建立当前目录中文件的File对象
File list[]=d.listFiles();//取得代表目录中所有文件的File对象数组
out.println(““ + path + ”目录下的文件:
“);
for(int i=0;i if(list.isFile()){
out.println(list.getName() + ”
“);
}
}
out.println(“
“ + path + ”目录下的目录:
“);
for(int i=0;i if(list.isDirectory()){
out.println(list.getName() + ”
“);
}
}
%>




判断是否为空白文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“/”);
out.println(path);
FileReader fr=new FileReader(path + ”\\AtEnd.txt”);//建立FileReader对象,并实例化为fr
//对FileReader类生成的对象使用read()方法,可以从字符流中读取下一个字符。
if(fr.read()==-1)//判断是否已读到文件的结尾
{
out.print(“AtEnd.txt文件中没有数据
“);
}else{
out.println(“AtEnd.txt文件中有数据”);
}
fr.close();
%>




读取所有的文件数据
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*,java.lang.*"%>





<%
String path=request.getRealPath(“.”);
FileReader fr=new FileReader(path + ”\\ReadData.txt”);
//关键在于读取过程中,要判断所读取的字符是否已经到了文件的末尾,并且这个字符是不是文件中的断行符,即判断该字符值是否为13。
int c=fr.read();//从文件中读取一个字符
//判断是否已读到文件结尾
while(c!=-1){
out.print((char)c);//输出读到的数据
c=fr.read();//从文件中继续读取数据
if(c==13){//判断是否为断行字符
out.print(“
“);//输出分行标签
fr.skip(1);//略过一个字符
//c=fr.read();//读取一个字符
}
}
fr.close();
%>




一行一行读取数据
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“”);//取得当前目录的路径
FileReader fr=new FileReader(path + ”\\file\\inc\\t.txt”);//建立FileReader对象,并实例化为fr
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();//从文件读取一行字符串
//判断读取到的字符串是否不为空
while(Line!=null){
out.println(Line + ”
“);//输出从文件中读取的数据
Line=br.readLine();//从文件中继续读取一行数据
}
br.close();//关闭BufferedReader对象
fr.close();//关闭文件
%>




略过文件中的字符不读取
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“.”);
FileReader fr=new FileReader(path + ”\\ReadData.txt”);
fr.skip(2);//跳过2个字节
int c=fr.read();//读取一个字节
while(c!=-1){
out.print((char)c);
c=fr.read();
}
fr.close();
%>




将数据写入文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“.”);
FileWriter fw=new FileWriter(path + ”\\WriteData.txt”);//建立FileWriter对象,并实例化fw
//将字符串写入文件
fw.write(“大家好!”);
fw.write(“本书是《JSP编程技巧》”);
fw.write(“请多多指教!”);
fw.write(“email:stride@sina.com”);
fw.close();

FileReader fr=new FileReader(path + ”\\WriteData.txt”);
BufferedReader br=new BufferedReader(fr);//建立BufferedReader对象,并实例化为br
String Line=br.readLine();
//读取一行数据
out.println(Line + ”
“);
br.close();//关闭BufferedReader对象
fr.close();
%>




将写入文件的数据分行
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
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(“请多多指教!”);
bw.newLine();//断行
bw.write(“email: stride@sina.com”);
bw.flush();//将数据更新至文件
fw.close();//关闭文件流
out.println(“写入文件内容为:
“);
FileReader fr=new FileReader(path + ”\\WriteData.txt”);
BufferedReader br=new BufferedReader(fr);
String Line=br.readLine();//读取一行数据
while(Line!=null){
out.println(Line + ”
“);
Line=br.readLine();
}
fr.close();
%>


如何将数据追加写入到文件
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.io.*"%>





<%
String path=request.getRealPath(“.”);
RandomAccessFile rf=new RandomAccessFile(path + ”\\WriteData.txt”,”rw”);//定义一个类RandomAccessFile的对象,并实例化
rf.seek(rf.length());//将指针移动到文件末尾
rf.writeBytes(“\nAppend a line to the file!”);
rf.close();//关闭文件流
out.println(“写入文件内容为:
“);
FileReader fr=new FileReader(path + ”\\WriteData.txt”);
BufferedReader br=new BufferedReader(fr);//读取文件的BufferedRead对象
String Line=br.readLine();
while(Line!=null){
out.println(Line + ”
“);
Line=br.readLine();
}
fr.close();//关闭文件
%>

本篇文章使用aigaogao Blog软件发布, “我的Blog要备份”