Http学习之使用HttpURLConnection发送post和get请求

最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。

在Java中可以使用HttpURLConnection发起这两种请求,了解此类,对于了解soap,和编写servlet的自动测试代码都有很大的帮助。

下面的代码简单描述了如何使用HttpURLConnection发起这两种请求,以及传递参数的方法:

public   class  HttpInvoker 

{


    

public   static   final  String GET_URL 
=   http://localhost:8080/welcome1
;


    

public   static   final  String POST_URL 
=   http://localhost:8080/welcome1
;


    

public   static   void  readContentFromGet() 
throws  IOException 

{

        

//  拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码

        String getURL 
=  GET_URL 
+   ?username=

                

+  URLEncoder.encode(
fat man utf-8 );

        URL getUrl 

=   new  URL(getURL);

        

//  根据拼凑的URL,打开连接,URL.openConnection函数会根据URL的类型,

        

//  返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection

        HttpURLConnection connection 
=  (HttpURLConnection) getUrl

                .openConnection();

        

//  进行连接,但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到

        

//  服务器
        connection.connect();

        

//  取得输入流,并使用Reader读取

        BufferedReader reader 
=   new  BufferedReader(
new  InputStreamReader(

                connection.getInputStream()));

        System.out.println(

=============================
);

        System.out.println(

Contents of get request
);

        System.out.println(

=============================
);

        String lines;

        

while  ((lines 
=  reader.readLine()) 
!=   null
{

            System.out.println(lines);

        }



        reader.close();

        

//  断开连接
        connection.disconnect();

        System.out.println(

=============================
);

        System.out.println(

Contents of get request ends
);

        System.out.println(

=============================
);

    }




    

public   static   void  readContentFromPost() 
throws  IOException 

{

        

//  Post请求的url,与get不同的是不需要带参数

        URL postUrl 
=   new  URL(POST_URL);

        

//  打开连接
        HttpURLConnection connection 
=  (HttpURLConnection) postUrl

                .openConnection();

        

//  Output to the connection. Default is

        

//  false, set to true because post

        

//  method must write something to the

        

//  connection

        

//  设置是否向connection输出,因为这个是post请求,参数要放在

        

//  http正文内,因此需要设为true

        connection.setDoOutput(
true );

        

//  Read from the connection. Default is true.

        connection.setDoInput(
true );

        

//  Set the post method. Default is GET

        connection.setRequestMethod(
POST );

        

//  Post cannot use caches

        

//  Post 请求不能使用缓存

        connection.setUseCaches(
false );

        

//  This method takes effects to

        

//  every instances of this class.

        

//  URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。

        

//  connection.setFollowRedirects(true);


        

//  This methods only

        

//  takes effacts to this

        

//  instance.

        

//  URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数

        connection.setInstanceFollowRedirects(
true );

        

//  Set the content type to urlencoded,

        

//  because we will write

        

//  some URL-encoded content to the

        

//  connection. Settings above must be set before connect!

        

//  配置本次连接的Content-type,配置为application/x-www-form-urlencoded的

        

//  意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode

        

//  进行编码
        connection.setRequestProperty(
Content-Type ,

                

application/x-www-form-urlencoded
);

        

//  连接,从postUrl.openConnection()至此的配置必须要在connect之前完成,

        

//  要注意的是connection.getOutputStream会隐含的进行connect。

        connection.connect();

        DataOutputStream out 

=   new  DataOutputStream(connection

                .getOutputStream());

        

//  The URL-encoded contend

        

//  正文,正文内容其实跟get的URL中’?’后的参数字符串一致

        String content 
=   firstname=   +  URLEncoder.encode(
一个大肥人 utf-8 );

        

//  DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写道流里面

        out.writeBytes(content); 


        out.flush();

        out.close(); 

//  flush and close

        BufferedReader reader 
=   new  BufferedReader(
new  InputStreamReader(

                connection.getInputStream()));

        String line;

        System.out.println(

=============================
);

        System.out.println(

Contents of post request
);

        System.out.println(

=============================
);

        

while  ((line 
=  reader.readLine()) 
!=   null
{

            System.out.println(line);

        }



        System.out.println(

=============================
);

        System.out.println(

Contents of post request ends
);

        System.out.println(

=============================
);

        reader.close();

        connection.disconnect();

    }




    




    

public   static   void  main(String[] args) 

{

        

//  TODO Auto-generated method stub


        
try  
{

            readContentFromGet();

            readContentFromPost();

        }

 
catch  (IOException e) 

{

            

//  TODO Auto-generated catch block

            e.printStackTrace();

        }



    }



}

上面的readContentFromGet()函数产生了一个get请求,传给servlet一个username参数,值为”fat
man”。
readContentFromPost()函数产生了一个post请求,传给servlet一个firstname参数,值为”一个大肥人”。
HttpURLConnection.connect函数,实际上只是建立了一个与服务器的tcp连接,并没有实际发送http请求。无论是post还是get,http请求实际上直到
HttpURLConnection
.getInputStream()这个函数里面才正式发送出去。

readContentFromPost()
中,顺序是重中之重,对connection对象的一切配置(那一堆set函数)都必须要在connect()函数执行之前完成。而对
outputStream的写操作,又必须要在inputStream的读操作之前。这些顺序实际上是由http请求的格式决定的。

http
请求实际上由两部分组成,一个是http头,所有关于此次http请求的配置都在http头里面定义,一个是正文content,在connect()函
数里面,会根据HttpURLConnection对象的配置值生成http头,因此在调用connect函数之前,就必须把所有的配置准备好。

紧接着http头的是http请求的正文,正文的内容通过outputStream写入,实际上outputStream不是一个网络流,充其量是个字符串流,往里面写入的东西不会立即发送到网络,而是在流关闭后,根据输入的内容生成http正文。


此,http请求的东西已经准备就绪。在getInputStream()函数调用的时候,就会把准备好的http请求正式发送到服务器了,然后返回一个
输入流,用于读取服务器对于此次http请求的返回信息。由于http请求在getInputStream的时候已经发送出去了(包括http头和正
文),因此在getInputStream()函数之后对connection对象进行设置(对http头的信息进行修改)或者写入
outputStream(对正文进行修改)都是没有意义的了,执行这些操作会导致异常的发生。

转自:http://blog.csdn.net/pandazxx/archive/2007/06/18/1657109.aspx

[转载]东南大学校歌释义

母校校歌




东南大学校歌(调寄《临江仙》)  


东揽钟山紫气,北拥扬子银涛。  



六朝松下听箫韶。  

齐梁余韵在,太学令名标。  
百载文枢江左,东南辈出英豪。  

海涵地负展宏韬。日新臻化境,四海领风骚。 





(东南大学校歌下载地址:http://www.seu.edu.cn/s/3/t/123/p/1/c/11/d/6817/list.htm)

 

   
这是一首以《临江仙》词调写成的歌词。《临江仙》属双调,间于中调与小令间。柳永《乐章集》入
“仙吕调”。“仙吕调”是“黄钟宫”的六调之一,“黄钟大吕”属高亢激越的声调,故极长于抒情。《临江仙》别体很多(共13种),此用第六体(依《词律》)。开头用两个六字句,上下片结尾用两个五字句,字数相同,平仄相反,易于形成对仗。全词仅58字,也方便记诵。 

   
词用一组工整的对仗句开头:“东揽锺山紫气,北拥扬子银涛”,首先与出东大的地理位置。东大地处南京,又位于锺山之西南。锺山,一名蒋山,乃至南京第一名胜。山高高耸立于城东北,距东南大不仅两三华里,从学校望去,不仅山似乎近在咫尺,甚至草木也依稀可辩。东晋时,因山有紫色石而被南迁的达官贵人改名“紫金山”。其实,真紫金山在山西境内,东晋南渡士人只是借此慰藉自己的思乡之情。这里的“紫气”
不是用老子“紫气东来”之典,而是切“紫金山”这名。庚信《哀江南赋》中便有“昔之虎踞龙盘,加以黄旗紫气”之句。由于山近,仿佛可将山中之山岚紫气“揽
”之入怀。后一句切东大位于扬子江畔。“北拥”二字又明言学校主要部分在江南却又横跨长江两岸,“江南”是令天下人魂牵梦绕之地,谢脁《入朝曲》云:“江南佳丽地,金陵帝王州。”况且又得锺山之拱卫,依山傍水:山是名扬天下之山,水是全国最大之水,得山水之滋养,诞生这样一所全国名校具有了地域上的优势。

   
这里很注意炼字炼句,而着力于两个动词“揽”和“拥”。前者有举手可及之义,明言锺山与该校相邻关系;而一“拥”字,似乎将万里长江“拥”入怀中,既有《岳阳楼记》中“涵远山,吞长江,浩浩荡荡”的磅礴气势,又暗指东大脚跨长江两岸,两岸四地,而长江居其中,似乎“拥”长江入校中,自然气势夺人。 

   
这两句又运用了工整的对仗句,“东”与“北”同属方位词,“揽”和“拥”均属动词,而主语均为省略了的“东南大学”。“锺山”与“扬子”是地名对(山水对)。“紫气”与“银涛”也对得很工,“紫”、“银”均是色彩。李白写长江时曾云:“解道澄江静如练,令人长忆谢玄晖”,谢玄晖(脁)曾以白“练”比喻长江的静态,“银涛”与“白练”异中有同,拥“银涛”入怀,颇有诗意。这两句不仅写出东大地理位置的优势,也写出其依山傍水之美,给人以美的感受。且“揽”、“拥”气魄宏大,透出东大不凡的“大气”。

   
“六朝松下听箫韶”(此处“听”读ting)一句,仿佛电影中由大的广角镜头转为小的特写镜头,从广阔的大江、高峻的大山,转为写一棵老松树。迅速把焦距对准东南大学本身。“六朝松”是东大西北角的一棵古树,相传原来长于六朝宫中。此句由写东大的地理位置转而写其历史,其转折点竟是这棵并不起眼的老松树,它没有栖霞山、庐山的六朝松高大挺拔,却给人以岁月沧桑之感。“六朝”是指历史上东吴、东晋、宋、齐、梁、陈,这几个朝代累计也有三百多年,从陈灭亡至今也已一千四百余年,人活不过百年,而这棵松树竟活了千年以上,树的古老道出这块土地的古老、历史的古老。于此古树下所听之“箫韶”,又是舜时的古乐,这是更古老的文化。《书经.益稷》曰:“箫韶九成,凤凰来仪。”“箫韶”,也就是“韶”乐。《论语》中有“(孔)子在齐闻‘韶’,三月不知肉味。曰:‘不图为乐之至于斯也。’”六朝松是古老的物质遗产,而“箫韶”则是古老的文化遗产,这是将二者有机结合,说明对古老的传统文化与人文精神的传承。“箫韶”二字乃叠韵字,并不十分通俗。但加一“听”字,则不难理解,显然是可听之物,系音乐之类,与“
箫韶”的本义便非常接近。“听箫韶”显得典雅、华贵,使东大这块古老的土地也有了一种神圣之感。“六朝松下听箫韶”,显然以中华文明的传承者自居,东大是
“名校”、“老校”,至此已尽在不言之中。

   
“齐梁遗韵在,太学令名标”二句,是历史的回顾。是由“六朝松下听箫韶”引发的思古之幽情。就在东大这块古老的土地上,一千八百年来,有多少可歌可泣的历史往事,有多少辉煌的、足以使我辈引以为荣的往事。从东吴永安元年(258年)设“五经博士”
和刘宋时雷次宗在鸡笼山下的这块土地上办学,讲经学、玄学、史学、文学开始,中国便有了高等教育,而东南大学便是其发源地之一。 

   
“齐梁”只是六朝中的两朝,却是南朝文化高度发展的时期,中国最早的格律诗“永明体”诗就产生于此时,中国最早的文人词梁武帝、沈约等的多首《江南弄》也产生于此时,《昭明文选》也于此时此地编成。祖冲之任职之华林学府,校试指南车之乐游苑也在今东大校园中,而梁钟嵘《诗品》、刘勰的《文心雕龙》等也都产生于齐梁时期,故在中国文化史上常以“齐梁”代六朝。“遗韵”,流风遗韵的缩语,六朝已过去千年,但六朝的文彩风流世代流传,而东大这块神奇的土地正是这六朝文化的源头。 

   
明代定都南京,洪武十四年(1381年)在东大这块土地上设国子监,后又改名“南雍”,这是当时的太学。加以东吴、刘宋时在此办学,均可称“太学”。“令名”,美名。“名标”,“名标青史”的缩语。明成祖曾于此编成《永乐大典》,成书后藏于南京文渊阁(东大北围墙外和平公园一带)。这两句道出了东大这块土地上曾对中国历史,尤其是对中华文化作出的贡献。虽然这两句较之东大厚重的历史文化积淀而言太简略了,但有此二句,已比全国的其他任何院校显得历史更悠久更深厚,而使东大人产生一种历史自豪感。 

   
“齐梁遗韵在,太学令名标”二句,又构成对仗。词的对仗没有律诗严格,这里用宽对,整炼之中又有几分松动,反而显得不板滞。此处没有为对仗而追求生硬的字面,而是信口道来,流畅而自然。仿佛千年的历史长河在静静流淌,在柔和的月光下,只是泛起粼粼的水波。这里也未着力去描绘这些“水波”,犹如家财亿万的巨富,对价值连城的珍宝也只是不十分在意的一提,无心着意炫耀,显得更雍容、大度。 

   
词的下片以“百载文枢江左”一句作转折,把地理的描述、辉煌的校前史的回顾打住,转而写建校以来的峥嵘岁月。“百载”是缩略词,可指目前的建校百年,即便一百多年、二百年也可略称“百载”,例如“二万五千里长征”可略为“万里长征”。“百载”相对于六朝以来的漫长历史而言是很短暂的。但毕竟百年前才有了这所现代意义的大学。这一句也是对百年校史的集中概括。“文枢江左”四字高度凝炼地说出其在中国教育界的地位。“文枢”,文化枢纽,文化中枢。三江师范学堂以来的百余年,使该校成了南方的文化中心之一。“江左”,即江东。古人叙地理以东为左,以西为右,故称江东为江左。万里长江一直由西向东流淌,但到了安徽芜湖以后转向东北再偏北方向流过,所以长江流经南京附近时,几乎作南北流淌,江的两岸不是一边是北、一边是南,而是一边是东、一边是西。人们站在长江大桥上这种感受特别明显。历史上称东吴为“江东”,其疆域大致相当于今江浙皖赣四省。“文枢江左”
一句自负而有分寸,实际上中央大学时期我校远不止是“江左文枢”,而是“天下文枢”(古人称“天下”实仅指中国)。 

   
“文枢江左”一句较为典雅含蓄,相比较下一句“东南辈出英豪”则较为直白。诗词写作、文章写作均应有变化。古人说:“文如看山不喜平”,含蓄是优点,若句句含蓄则显得晦涩艰深。“东南”二字有二义性,本可指我国的东南一带,明清以来,东南一带是天下人才之渊薮。清朝近三百年间,江苏出的状元就占全国的一半以上。然而“东南”二字现出在东南大学校歌中,它就更多指这所大学。百年以来,东南大学和全国少数几所名牌大学一样,涌现过一大批能改写中国历史的大人物。这里既有大科学家、文学家、艺术家、军事家,也有像江泽民同志那样的大政治家。还有更多名声虽不显赫、却也成就卓著的人物。故云:“东南辈出英豪。” 

   
“海涵地负展宏韬”一句是下片的过渡,从昨天、今天过渡到写明天,写未来,同时此句又揭示了东大作为名牌大学的办学理念与办学思想。“海涵地负”,谓大地负载万物,海洋容纳百川,形容包罗万象,含蕴丰富,也比喻人的学问博大精深。用在这里,它应具有以下内涵:一是名校的胸襟与器识:从领导到教师,应当有一种雍容阔大的气度,能吸纳各种各样的人才;二是作为一所研究性、开放性、综合性的大学,要给各学科以宽松的生存发展空间,多学科的相互共存与融合,才能造就一个可以造就文化大师、科学大师的人文环境和科学环境;三是作为办学思想,东南大学应当容许各种办学风格、各种学术流派的平等竞争,要能兼容并包;四是作为一所名牌大学,它是知识和学术的海洋,应当有一批博大精深、能在自己某一学术领域内领国际、国内风骚数年、数十年、乃至数百年的大师级的专家,他们今天为东大的辉煌辛苦耕耘、鞠躬尽瘁,也为东大日后的持续发展和创建世界高水平大学奠定基础。

   
“展宏韬”意为施展宏图大略。“韬”出于《孙子兵法》,有龙韬、虎韬、豹韬等六韬,此处
“宏韬”指学校的远景规划、宏大的发展计划。用一“展”字,有发挥、实践之意。这里没有半点犹疑和彷徨。有上述“海涵地负”的帅才、将才、人才,实现“宏韬”则毋庸置疑。 

   
词的结尾二句既是对东大未来的展望,也是全校师生奋斗的长远目标。面对日益激烈的国际、国内的竞争,科学、经济、文化、教育事业的发展对未来的高等教育尤其是象东大这样的名牌大学提出了很高的要求。“日新臻化境”,才能适应形势的变化,“日新”语本《易经.系辞上》:“富有之谓大业,日新之谓盛德。”孔颖达疏:“其德日日增新。”在信息时代的今天,科学技术日新月异,社会也瞬息万变,人们的思想观念也须日日更新。道德的升华、技术的进步、观念的更新,均须达到一个全新的境界。“化境”原出《庄子》的“物化”思想,即庖丁解牛的以“无厚”入“有间”
的思想。所谓“无厚”者,“金之至精,炼之至熟,刃之至神,而厚之至变,至化者也。”后引申为诗之“化境”,是指诗人举重若轻,不见笔墨痕迹的深厚功力,创作出思想与艺术高度统一的、浑然一体的艺术境界。“化境”是诗歌作品所达到的最高美学境界。进一步引申,“化境”是艺术造诣达到精妙的境界,可与造化媲美。一个人,一个学校达此“仙境”,其精神、科技、文化均臻于最高的境界。“四海领风骚”也就势所必然。 

   
“四海”一语出自《书经》:“文命敷于四海。”古时认为中国四面皆海,中国为海内,外国是海外,四海即指海内外,也即天下。毛主席也曾云:马列主义是“放之四海而皆准”的真理,其中“四海”亦指世界。“风骚”本指《诗经》之《国风》和《离骚》,古代读书人认为“风”“骚”是文学的极至。“领风骚”指居世界学界的前列,也即该校要成为世界高水平大学的婉转说话。清人赵翼《论诗绝句》曾去:“江山代有才人出,各领风骚数百年。”校领导已制定出五十年的远期发展目标,要把东大在21世纪中叶建成世界高水平大学,我们对此将抱定必胜的信念。

作者:王步高 
(人文学院教授、博士生导师)

 





东南大学校歌





词作者: 
  王步高1947年出生,扬中县人,先后就读于南京大学(本科)、吉林大学(硕士)、南京师范大学(博士),师从唐圭璋教授。曾在中学、出版社任职近二十年,现为我校人文学院中文系教授,兼《中华词学》主编、中大校友诗社总干事等。潜心诗词研究与创作,有著作三、四十种,约1700万字,获奖二十余项。 

曲作者: 
  印青 总政歌舞团国家一级作曲。作有大量的优秀军旅歌曲,多首获大奖。其代表作有“走进新时代”、“大西北”等。是当今具有较大影响的中青年作曲家。他在为我校校歌作曲时,古韵风与现代气息结合,曲调具有昆曲音韵;同时采用了中等速度的行进节奏,体现了稳健、自豪、向上的精神风貌。  

 

[Java]读取文件方法大全

1、按字节读取文件内容
2、按字符读取文件内容
3、按行读取文件内容
4、随机读取文件内容

public class ReadFromFile {

    

    public static void readFileByBytes(String fileName) {

        File file = new File(fileName);

        InputStream in = null;

        try {

            System.out.println(以字节为单位读取文件内容,一次读一个字节:);

            // 一次读一个字节
            in = new FileInputStream(file);

            int tempbyte;

            while ((tempbyte = in.read()) != 1{

                System.out.write(tempbyte);

            }

            in.close();

        catch (IOException e) {

            e.printStackTrace();

            return;

        }

        try {

            System.out.println(以字节为单位读取文件内容,一次读多个字节:);

            // 一次读多个字节
            byte[] tempbytes = new byte[100];

            int byteread = 0;

            in = new FileInputStream(fileName);

            ReadFromFile.showAvailableBytes(in);

            // 读入多个字节到字节数组中,byteread为一次读入的字节数
            while ((byteread = in.read(tempbytes)) != 1{

                System.out.write(tempbytes, 0byteread);

            }

        catch (Exception e1) {

            e1.printStackTrace();

        finally {

            if (in != null{

                try {

                    in.close();

                catch (IOException e1) {

                }

            }

        }

    }

    

    public static void readFileByChars(String fileName) {

        File file = new File(fileName);

        Reader reader = null;

        try {

            System.out.println(以字符为单位读取文件内容,一次读一个字节:);

            // 一次读一个字符
            reader = new InputStreamReader(new FileInputStream(file));

            int tempchar;

            while ((tempchar = reader.read()) != 1{

                // 对于windows下,\r\n这两个字符在一起时,表示一个换行。

                // 但如果这两个字符分开显示时,会换两次行。

                // 因此,屏蔽掉\r,或者屏蔽\n。否则,将会多出很多空行。
                if (((chartempchar) != \r{

                    System.out.print((chartempchar);

                }

            }

            reader.close();

        catch (Exception e) {

            e.printStackTrace();

        }

        try {

            System.out.println(以字符为单位读取文件内容,一次读多个字节:);

            // 一次读多个字符
            char[] tempchars = new char[30];

            int charread = 0;

            reader = new InputStreamReader(new FileInputStream(fileName));

            // 读入多个字符到字符数组中,charread为一次读取字符数
            while ((charread = reader.read(tempchars)) != 1{

                // 同样屏蔽掉\r不显示
                if ((charread == tempchars.length)

                        && (tempchars[tempchars.length  1!= \r)) {

                    System.out.print(tempchars);

                else {

                    for (int = 0< charread; i++{

                        if (tempchars[i] == \r{

                            continue;

                        else {

                            System.out.print(tempchars[i]);

                        }

                    }

                }

            }

        catch (Exception e1) {

            e1.printStackTrace();

        finally {

            if (reader != null{

                try {

                    reader.close();

                catch (IOException e1) {

                }

            }

        }

    }

    

    public static void readFileByLines(String fileName) {

        File file = new File(fileName);

        BufferedReader reader = null;

        try {

            System.out.println(以行为单位读取文件内容,一次读一整行:);

            reader = new BufferedReader(new FileReader(file));

            String tempString = null;

            int line = 1;

            // 一次读入一行,直到读入null为文件结束
            while ((tempString = reader.readLine()) != null{

                // 显示行号
                System.out.println(line  + line +  + tempString);

                line++;

            }

            reader.close();

        catch (IOException e) {

            e.printStackTrace();

        finally {

            if (reader != null{

                try {

                    reader.close();

                catch (IOException e1) {

                }

            }

        }

    }

    

    public static void readFileByRandomAccess(String fileName) {

        RandomAccessFile randomFile = null;

        try {

            System.out.println(随机读取一段文件内容:);

            // 打开一个随机访问文件流,按只读方式
            randomFile = new RandomAccessFile(fileName, r);

            // 文件长度,字节数
            long fileLength = randomFile.length();

            // 读文件的起始位置
            int beginIndex = (fileLength > 4? 4 0;

            // 将读文件的开始位置移到beginIndex位置。
            randomFile.seek(beginIndex);

            byte[] bytes = new byte[10];

            int byteread = 0;

            // 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。

            // 将一次读取的字节数赋给byteread
            while ((byteread = randomFile.read(bytes)) != 1{

                System.out.write(bytes, 0byteread);

            }

        catch (IOException e) {

            e.printStackTrace();

        finally {

            if (randomFile != null{

                try {

                    randomFile.close();

                catch (IOException e1) {

                }

            }

        }

    }

    

    private static void showAvailableBytes(InputStream in) {

        try {

            System.out.println(当前字节输入流中的字节数为: + in.available());

        catch (IOException e) {

            e.printStackTrace();

        }

    }

    public static void main(String[] args) {

        String fileName = C:/temp/newTemp.txt;

        ReadFromFile.readFileByBytes(fileName);

        ReadFromFile.readFileByChars(fileName);

        ReadFromFile.readFileByLines(fileName);

        ReadFromFile.readFileByRandomAccess(fileName);

    }

}

5、将内容追加到文件尾部

public class AppendToFile {

    

    public static void appendMethodA(String fileName, String content) {

        try {

            // 打开一个随机访问文件流,按读写方式
            RandomAccessFile randomFile = new RandomAccessFile(fileName, rw);

            // 文件长度,字节数
            long fileLength = randomFile.length();

            //将写文件指针移到文件尾。
            randomFile.seek(fileLength);

            randomFile.writeBytes(content);

            randomFile.close();

        catch (IOException e) {

            e.printStackTrace();

        }

    }

    

    public static void appendMethodB(String fileName, String content) {

        try {

            //打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
            FileWriter writer = new FileWriter(fileName, true);

            writer.write(content);

            writer.close();

        catch (IOException e) {

            e.printStackTrace();

        }

    }

    public static void main(String[] args) {

        String fileName = C:/temp/newTemp.txt;

        String content = new append!;

        //按方法A追加文件
        AppendToFile.appendMethodA(fileName, content);

        AppendToFile.appendMethodA(fileName, append end. \n);

        //显示文件内容
        ReadFromFile.readFileByLines(fileName);

        //按方法B追加文件
        AppendToFile.appendMethodB(fileName, content);

        AppendToFile.appendMethodB(fileName, append end. \n);

        //显示文件内容
        ReadFromFile.readFileByLines(fileName);

    }

}

 

增强J2ME的String能力——分割字符串(附源代码)

从JDK1.4以后,String类中新增了split方法来实现字符串的分割,但是在J2ME中却没有该方法(MIDP2.0中也没有实现),但是在实际使用过程中,有些时候的确要用到这种操作,这里将我以前实现的一段代码和大家共享,不足之处大家多提意见和建议:

 private static String[] split(String
original,String regex)
 {
  //取子串的起始位置
  int startIndex = 0;
  //将结果数据先放入Vector中
  Vector v = new Vector();
  //返回的结果字符串数组
  String[] str = null;
 
  //存储取子串时起始位置
  int index = 0;
  //获得匹配子串的位置
  startIndex = original.indexOf(regex);
 
  //System.out.println(“0” + startIndex);
 
  //如果起始字符串的位置小于字符串的长度,则证明没有取到字符串末尾。
  //-1代表取到了末尾
  while(startIndex <
original.length() && startIndex !=
-1)
  {
   String temp =
original.substring(index,startIndex);
 
  
System.out.println(”    
”  + startIndex);
 
   //取子串
   v.addElement(temp);
           
//设置取子串的起始位置
   index = startIndex +
regex.length();
   //获得匹配子串的位置
   startIndex =
original.indexOf(regex,startIndex + regex.length());
  }
  //取结束的子串
  v.addElement(original.substring(index + 1 –
regex.length()));
 
  //将Vector对象转换成数组
  str = new String[v.size()];
  for(int i=0;i<v.size();i++)
  {
   str[i] =
(String)v.elementAt(i);
  }
  //返回生成的数组
  return str;
}