毕业论文外文翻译-JAVA.doc
《毕业论文外文翻译-JAVA.doc》由会员分享,可在线阅读,更多相关《毕业论文外文翻译-JAVA.doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、JavaJava I/O 系统对编程语言的设计者来说,创建一套好的输入输出(I/O)系统,是一项难度极高的任务。这一点可以从解决方案的数量之多上看出端倪。这个问题难就难在它要面对的可能性太多了。不仅是因为有那么多I/O的源和目地(文件,控制台,网络连接等等),而且还有很多方法(顺序的sequential,随机的random-access,缓存的buffered,二进制的binary,字符方式的character,行的by lines,字的by words,等等)。 Java类库的设计者们用创建很多类的办法来解决这个问题。坦率地说Java I/O系统的类实在是太多了,以至于初看起来会把人吓着(但
2、是,具有讽刺意味的是,这种设计实际上是限制了类的爆炸性增长)。此外,Java在1.0版之后又对其I/O类库作了重大的修改,原先是面向byte的,现在又补充了面向Unicode字符的类库。为了提高性能,完善功能,JDK 1.4又加了一个nio(意思是new I/O。这个名字会用上很多年)。这么以来,如果你想对Java的I/O类库有个全面了解,并且做到运用自如,你就得先学习大量的类。此外,了解I/O类库的演化的历史也是相当重要的。可能你的第一反应是别拿什么历史来烦我了,告诉我怎么用就可以了!但问题是,如果你对这段历史一无所知,很快就会被一些有用或是没用的类给搞糊涂了。 本章会介绍Java标准类库中
3、的各种I/O类,及其使用方法。 File 类在介绍直接从流里读写数据的类之前,我们先介绍一下处理文件和目录的类。 File类有一个极具欺骗性的名字;或许你会认为这是一个关于文件的类,但它不是。你可以用它来表示某个文件的名字,也可以用它来表示目录里一组文件的名字。如果它表示的是一组文件,那么你还可以用list( )方法来进行查询,让它会返回String数组。由于元素数量是固定的,因此数组会比容器更好一些。如果你想要获取另一个目录的清单,再建一个File对象就是了。实际上,叫它 FilePath可能会更好一些。下面我们举例说明怎样使用这个类及其相关的FilenameFilter接口。 目录列表器假
4、设你想看看这个目录。有两个办法。一是不带参数调用list( )。它返回的是File对象所含内容的完整清单。但是,如果你要的是一个限制性列表(restricted list)的话 比方说,你想看看所有扩展名为.java的文件 那么你就得使用目录过滤器了。这是一个专门负责挑选显示File对象的内容的类。 下面就是源代码。看看,用了java.utils.Arrays.sort( )和11章的AlphabeticComparator之后,我们没费吹灰之力就对结果作了排序(按字母顺序): /: c12:DirList.java/ Displays directory listing using regu
5、lar expressions./ Args: D.*.javaimport java.io.*;import java.util.*;import java.util.regex.*;import com.bruceeckel.util.*;public class DirList public static void main(String args) File path = new File(.); String list; if(args.length = 0) list = path.list(); else list = path.list(new DirFilter(args0)
6、; Arrays.sort(list, new AlphabeticComparator(); for(int i = 0; i list.length; i+) System.out.println(listi); class DirFilter implements FilenameFilter private Pattern pattern; public DirFilter(String regex) pattern = Ppile(regex); public boolean accept(File dir, String name) / Strip path information
7、, search for regex: return pattern.matcher( new File(name).getName().matches(); /:DirFilter实现了FilenameFilter接口。我们来看看FilenameFilter究竟有多简单: public interface FilenameFilter boolean accept(File dir, String name);也就是说,这类对象的任务就是提供一个accept( )的方法。之所以要创建这个类,就是要给list( )提供一个accept( )方法,这样当list( )判断该返回哪些文件名的时候,
8、能够回过头来调用accept( )方法。因此,这种结构通常被称为回调(callback)。更准确地说,由于list( )实现了基本功能,而FilenameFilter提供了对外服务所需的算法,因此这是一种策略模式(Strategy Pattern)。由于list( )拿FilenameFilter对象当参数,因此你可以将任何实现FilenameFilter接口的对象传给它,并以此(甚至是在运行时)控制list( )的工作方式。回调能提高程序的灵活性。 DirFilter还告诉我们,interface只是包含了一些方法,它没说你只能写这些方法。(但是,你至少要定义接口里有的方法。) 这里我们还定
9、义了DirFilter的构造函数。 accept( )方法需要两个参数,一个是File对象,表示这个文件是在哪个目录里面的;另一个是String,表示文件名。虽然你可以忽略它们中的一个,甚至两个都不管,但是你大概总得用一下文件名吧。记住,list( )会对目录里的每个文件调用accept( ),并以此判断是不是把它包括到返回值里;这个判断依据就是accept( )的返回值。 切记,文件名里不能有路径信息。为此你只要用一个String对象来创建File对象,然后再调用这个File对象的getName( )就可以了。它会帮你剥离路径信息(以一种平台无关的方式)。然后再在accept( )里面用正则
10、表达式(regular expression)的matcher对象判断,regex是否与文件名相匹配。兜完这个圈子,list( )方法返回了一个数组。 匿名内部类这是用匿名内部类(详见第八章)来重写程序的绝佳机会。下面我们先创建一个返回FilenameFilter的filter( )方法。 /: c12:DirList2.java/ Uses anonymous inner classes./ Args: D.*.javaimport java.io.*;import java.util.*;import java.util.regex.*;import com.bruceeckel.util
11、.*;public class DirList2 public static FilenameFilter filter(final String regex) / Creation of anonymous inner class: return new FilenameFilter() private Pattern pattern = Ppile(regex); public boolean accept(File dir, String name) return pattern.matcher( new File(name).getName().matches(); ; / End o
12、f anonymous inner class public static void main(String args) File path = new File(.); String list; if(args.length = 0) list = path.list(); else list = path.list(filter(args0); Arrays.sort(list, new AlphabeticComparator(); for(int i = 0; i list.length; i+) System.out.println(listi); /:注意,filter( )的参数
13、必须是final的。要想在匿名内部类里使用其作用域之外的对象,只能这么做。 这是对前面所讲的代码的改进,现在FilenameFilter类已经与DirList2紧紧地绑在一起了。不过你还可以更进一步,把这个匿名内部类定义成list( )的参数,这样代码会变得更紧凑: /: c12:DirList3.java/ Building the anonymous inner class in-place./ Args: D.*.javaimport java.io.*;import java.util.*;import java.util.regex.*;import com.bruceeckel.u
14、til.*;public class DirList3 public static void main(final String args) File path = new File(.); String list; if(args.length = 0) list = path.list(); else list = path.list(new FilenameFilter() private Pattern pattern = Ppile(args0); public boolean accept(File dir, String name) return pattern.matcher(
15、 new File(name).getName().matches(); ); Arrays.sort(list, new AlphabeticComparator(); for(int i = 0; i list.length; i+) System.out.println(listi); /:现在该轮到main( )的参数成final了,因为匿名内部类要用它的arg0了。 这个例子告诉我们,可以用匿名内部类来创建专门供特定问题用的,一次性的类。这种做法的好处是,它能把解决某个问题的代码全都集中到一个地方。但是从另一角度来说,这样做会使代码的可读性变差,所以要慎重。 查看与创建目录File类
16、的功能不仅限于显示文件或目录。它还能帮你创建新的目录甚至是目录路径(directory path),如果目录不存在的话。此外它还能用来检查文件的属性(大小,上次修改的日期,读写权限等),判断File对象表示的是文件还是目录,以及删除文件。下面这段程序演示了File类的一些其他方法(请查阅JDK文档,以了解其全部功能): /: c12:MakeDirectories.java/ Demonstrates the use of the File class to/ create directories and manipulate files./ Args: MakeDirectoriesTest
17、import com.bruceeckel.simpletest.*;import java.io.*;public class MakeDirectories private static Test monitor = new Test(); private static void usage() System.err.println( Usage:MakeDirectories path1 .n + Creates each pathn + Usage:MakeDirectories -d path1 .n + Deletes each pathn + Usage:MakeDirector
18、ies -r path1 path2n + Renames from path1 to path2); System.exit(1); private static void fileData(File f) System.out.println( Absolute path: + f.getAbsolutePath() + n Can read: + f.canRead() + n Can write: + f.canWrite() + n getName: + f.getName() + n getParent: + f.getParent() + n getPath: + f.getPa
19、th() + n length: + f.length() + n lastModified: + f.lastModified(); if(f.isFile() System.out.println(Its a file); else if(f.isDirectory() System.out.println(Its a directory); public static void main(String args) if(args.length 1) usage(); if(args0.equals(-r) if(args.length != 3) usage(); File old =
20、new File(args1), rname = new File(args2); old.renameTo(rname); fileData(old); fileData(rname); return; / Exit main int count = 0; boolean del = false; if(args0.equals(-d) count+; del = true; count-; while(+count args.length) File f = new File(argscount); if(f.exists() System.out.println(f + exists);
21、 if(del) System.out.println(deleting. + f); f.delete(); else / Doesnt exist if(!del) f.mkdirs(); System.out.println(created + f); fileData(f); if(args.length = 1 & args0.equals(MakeDirectoriesTest) monitor.expect(new String % (MakeDirectoriesTest exists+ |created MakeDirectoriesTest), % Absolute pat
22、h: + S+MakeDirectoriesTest, % Can read: (true|false), % Can write: (true|false), getName: MakeDirectoriesTest, getParent: null, getPath: MakeDirectoriesTest, % length: d+, % lastModified: d+, Its a directory ); /:在fileData( )演示了全套查询文件和目录路径信息的方法。 main( )的第一条指令就是执行renameTo( )。它会把文件重命名成(或者说移动到)新的目录,也就是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业论文 外文 翻译 JAVA
限制150内