仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 930|回复: 18
打印 上一主题 下一主题

[学习教程] 来看目次列表器

[复制链接]
深爱那片海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:36:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
手机用到的是用j2me所编出来的小程序。
如今假定我们想寓目一个目次列表。可用两种体例列出File对象。若在不含自变量(参数)的情形下挪用list(),会取得File对象包括的一个完全列表。但是,若想对这个列表举行某些限定,就必要利用一个“目次过滤器”,该类的感化是指出应怎样选择File对象来完成显现。
上面是用于这个例子的代码(或在实行该程序时碰到坚苦,请参考第3章3.1.2大节“赋值”):
  1. //:DirList.java
  2. //Displaysdirectorylisting
  3. packagec10;
  4. importjava.io.*;
  5. publicclassDirList{
  6. publicstaticvoidmain(String[]args){
  7. try{
  8. Filepath=newFile(".");
  9. String[]list;
  10. if(args.length==0)
  11. list=path.list();
  12. else
  13. list=path.list(newDirFilter(args[0]));
  14. for(inti=0;i<list.length;i++)
  15. System.out.println(list[i]);
  16. }catch(Exceptione){
  17. e.printStackTrace();
  18. }
  19. }
  20. }
  21. classDirFilterimplementsFilenameFilter{
  22. Stringafn;
  23. DirFilter(Stringafn){this.afn=afn;}
  24. publicbooleanaccept(Filedir,Stringname){
  25. //Strippathinformation:
  26. Stringf=newFile(name).getName();
  27. returnf.indexOf(afn)!=-1;
  28. }
  29. }///:~
复制代码
DirFilter类“完成”了interfaceFilenameFilter(关于接口的成绩,已在第7章举行了胪陈)。上面让我们看看FilenameFilter接口有何等复杂:

publicinterfaceFilenameFilter{
booleanaccept(文件目次,字串名);
}

它指出这类范例的一切对象都供应了一个名为accept()的办法。之以是要创立如许的一个类,面前的全体缘故原由就是把accept()办法供应给list()办法,使list()可以“回调”accept(),从而判别应将哪些文件名包含到列表中。因而,一般将这类手艺称为“回调”,偶然也称为“算子”(也就是说,DirFilter是一个算子,由于它独一的感化就是包容一个办法)。因为list()接纳一个FilenameFilter对象作为本人的自变量利用,以是我们能传送完成了FilenameFilter的任何类的一个对象,用它决意(乃至在运转期)list()办法的举动体例。回调的目标是在代码的举动上供应更年夜的天真性。
经由过程DirFilter,我们看出只管一个“接口”只包括了一系列办法,但其实不范围于只能写那些办法(可是,最少必需供应一个接口内一切办法的界说。在这类情形下,DirFilter构建器也会创立)。
accept()办法必需回收一个File对象,用它唆使用于寻觅一个特定文件的目次;并回收一个String,个中包括了要寻觅之文件的名字。可决意利用或疏忽这两个参数之一,但偶然最少要利用文件名。记着list()办法筹办为目次对象中的每一个文件名挪用accept(),核实哪一个应包括在内——详细由accept()前往的“布尔”了局决意。
为断定我们操纵的只是文件名,个中没有包括路径信息,必需接纳String对象,并在它的内部创立一个File对象。然后挪用getName(),它的感化是往除一切路径信息(接纳与平台有关的体例)。随后,accept()用String类的indexOf()办法反省文件名外部是不是存在搜刮字串"afn"。若在字串内找到afn,那末前往值就是afn的出发点索引;但假设没有找到,前往值就是-1。注重这只是一个复杂的字串搜刮例子,未利用罕见的表达式“通配符”计划,好比"fo?.b?r*";这类计划更难完成。
list()办法前往的是一个数组。可查询这个数组的长度,然后在个中遍历,选定命组元素。与C和C++的相似举动比拟,这类于办法表里便利游历数组的举动无疑是一个明显的前进。

1.匿名外部类
下例用一个匿名外部类(已在第7章报告)来重写显得十分幻想。起首创立了一个filter()办法,它前往指向FilenameFilter的一个句柄:
  1. //:DirList2.java
  2. //UsesJava1.1anonymousinnerclasses
  3. importjava.io.*;
  4. publicclassDirList2{
  5. publicstaticFilenameFilter
  6. filter(finalStringafn){
  7. //Creationofanonymousinnerclass:
  8. returnnewFilenameFilter(){
  9. Stringfn=afn;
  10. publicbooleanaccept(Filedir,Stringn){
  11. //Strippathinformation:
  12. Stringf=newFile(n).getName();
  13. returnf.indexOf(fn)!=-1;
  14. }
  15. };//Endofanonymousinnerclass
  16. }
  17. publicstaticvoidmain(String[]args){
  18. try{
  19. Filepath=newFile(".");
  20. String[]list;
  21. if(args.length==0)
  22. list=path.list();
  23. else
  24. list=path.list(filter(args[0]));
  25. for(inti=0;i<list.length;i++)
  26. System.out.println(list[i]);
  27. }catch(Exceptione){
  28. e.printStackTrace();
  29. }
  30. }
  31. }///:~
复制代码
注重filter()的自变量必需是final。这一点是匿名外部类请求的,使其能利用来自自己感化域之外的一个对象。
之以是以为如许做更好,是因为FilenameFilter类如今同DirList2严密地分离在一同。但是,我们可接纳进一步的操纵,将匿名外部类界说成list()的一个参数,使其显得加倍精简。以下所示:
  1. //:DirList3.java
  2. //Buildingtheanonymousinnerclass"in-place"
  3. importjava.io.*;
  4. publicclassDirList3{
  5. publicstaticvoidmain(finalString[]args){
  6. try{
  7. Filepath=newFile(".");
  8. String[]list;
  9. if(args.length==0)
  10. list=path.list();
  11. else
  12. list=path.list(
  13. newFilenameFilter(){
  14. publicboolean
  15. accept(Filedir,Stringn){
  16. Stringf=newFile(n).getName();
  17. returnf.indexOf(args[0])!=-1;
  18. }
  19. });
  20. for(inti=0;i<list.length;i++)
  21. System.out.println(list[i]);
  22. }catch(Exceptione){
  23. e.printStackTrace();
  24. }
  25. }
  26. }///:~
复制代码
main()如今的自变量是final,由于匿名外部类间接利用args[0]。
这展现了怎样使用匿名外部类疾速创立精简的类,以便办理一些庞大的成绩。因为Java中的一切工具都与类有关,以是它无疑是一种相称有效的编码手艺。它的一个优点是将特定的成绩断绝在一个中央一致办理。但在另外一方面,如许天生的代码不是非常简单浏览,以是利用时必需稳重。

2.按次目次列表
常常都必要文件名以排好序的体例供应。因为Java1.0和Java1.1都没有供应对排序的撑持(从Java1.2入手下手供应),以是必需用第8章创立的SortVector将这一才能间接到场本人的程序。就象上面如许:
  1. //:SortedDirList.java
  2. //Displayssorteddirectorylisting
  3. importjava.io.*;
  4. importc08.*;
  5. publicclassSortedDirList{
  6. privateFilepath;
  7. privateString[]list;
  8. publicSortedDirList(finalStringafn){
  9. path=newFile(".");
  10. if(afn==null)
  11. list=path.list();
  12. else
  13. list=path.list(
  14. newFilenameFilter(){
  15. publicboolean
  16. accept(Filedir,Stringn){
  17. Stringf=newFile(n).getName();
  18. returnf.indexOf(afn)!=-1;
  19. }
  20. });
  21. sort();
  22. }
  23. voidprint(){
  24. for(inti=0;i<list.length;i++)
  25. System.out.println(list[i]);
  26. }
  27. privatevoidsort(){
  28. StrSortVectorsv=newStrSortVector();
  29. for(inti=0;i<list.length;i++)
  30. sv.addElement(list[i]);
  31. //Thefirsttimeanelementispulledfrom
  32. //theStrSortVectorthelistissorted:
  33. for(inti=0;i<list.length;i++)
  34. list[i]=sv.elementAt(i);
  35. }
  36. //Testit:
  37. publicstaticvoidmain(String[]args){
  38. SortedDirListsd;
  39. if(args.length==0)
  40. sd=newSortedDirList(null);
  41. else
  42. sd=newSortedDirList(args[0]);
  43. sd.print();
  44. }
  45. }///:~
复制代码
这里举行了别的少量改善。不再是将path(路径)和list(列表)创立为main()的当地变量,它们酿成了类的成员,使它们的值能在对象“保存”时代便利地会见。现实上,main()如今只是对类举行测试的一种体例。人人能够看到,一旦列表创立终了,类的构建器就会主动入手下手对列表举行排序。
这类排序不请求辨别巨细写,以是终极不会失掉一组全体单词都以年夜写字母开首的列表,随着是全体以小写字母开首的列表。但是,我们注重到在以不异字母开首的一组文件名中,年夜写字母是排在后面的——这对尺度的排序来讲还是一种分歧格的举动。Java1.2已乐成办理了这个成绩。
Java的B/s开发是通常是javaweb开发,又叫J2EE开发,J2SE是手机开发。C#的C/s和B/s开发是说.net网页编程和Asp开发。。u在这里说明一点;资深一点的Java和C#程序员都明白一点
因胸联盟 该用户已被删除
沙发
发表于 2015-1-21 10:45:04 来自手机 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
山那边是海 该用户已被删除
板凳
发表于 2015-1-30 15:52:09 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
蒙在股里 该用户已被删除
地板
发表于 2015-2-6 13:53:50 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
再见西城 该用户已被删除
5#
发表于 2015-2-8 06:24:25 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
admin 该用户已被删除
6#
发表于 2015-2-9 00:30:22 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-2-13 11:44:01 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
冷月葬花魂 该用户已被删除
8#
发表于 2015-2-24 15:20:42 | 只看该作者
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
小妖女 该用户已被删除
9#
发表于 2015-3-7 12:30:22 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
小魔女 该用户已被删除
10#
发表于 2015-3-15 05:07:27 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
不帅 该用户已被删除
11#
发表于 2015-3-17 06:09:39 | 只看该作者
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
深爱那片海 该用户已被删除
12#
 楼主| 发表于 2015-3-23 22:29:51 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
金色的骷髅 该用户已被删除
13#
发表于 2015-3-29 02:28:09 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
活着的死人 该用户已被删除
14#
发表于 2015-4-3 21:10:01 | 只看该作者
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
简单生活 该用户已被删除
15#
发表于 2015-4-15 22:19:21 | 只看该作者
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
乐观 该用户已被删除
16#
发表于 2015-4-20 20:20:19 | 只看该作者
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
爱飞 该用户已被删除
17#
发表于 2015-4-25 09:19:06 | 只看该作者
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
精灵巫婆 该用户已被删除
18#
发表于 2015-5-1 03:21:12 | 只看该作者
是一种使用者不需花费很多时间学习的语言
19#
发表于 2015-5-1 19:10:20 | 只看该作者
一般学编程语言都是从C语开始学的,我也不例外,但还是可能不学过程语言而直接学面向对象语言的,你是刚接触语言,还是从C开始学比较好,基础会很深点,如果你直接学习JAVA也能上手,一般大家在学语言的时候都记一些语言的关键词,常有的包和接口等。再去做逻辑代码的编写,以后的学习过程都是从逻辑代码编写中提升的,所以这方面都是经验积累的。你要开始学习就从
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-15 04:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表