分享
 
 
 

让你的应用程序随Java流而动

王朝java/jsp·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

java.io包包含了用于治理文件和数据流的类。Java流是一大块顺序数据,你可以对它进行治理,让它适合你应用程序的需求。

文件被作为字节的顺序集保存在存储设备上。你可以使用输入流从文件里读出字节,并把这些字节保存到临时的字节数组里,或者使用输出流把它们写到新的文件里。使用流,你可以进行自动化任务,例如备份服务器上的一组目录,从文本文件读出字符,以及把文本信息写到日志文件里。

java.io包的要害组件是文件对象、InputStreams和OutputStreams、FileStreams、阅读器,以及编写器。

文件对象

在我们开始把这些文件转变成流之前,你需要对文件对象有一个很好的理解。文件对象代表了本地文件系统里的文件或者文件夹。要注重:声明一个文件对象并不会在文件系统里创建文件。

在你和文件系统打交道的时候,异常处理是很重要的。文件可能不存在——或者可能无法使用你指定的路径创建文件夹。

下面这些例子显示了文件对象的方法的使用。

创建一个新目录

使用下面的代码就能够创建一个新目录。让一个对象代表新目录,然后调用mkdir()方法创建这个目录:

//Create File Object

File newDir = new File(“d:/test/mydocs/”);

//Create New Directory

newDir.mkdir();

删除一个文件

删除一个文件很轻易。只用为要删除的文件创建文件对象并调用文件的delete()方法就行了,见下面的代码片段:

//Create File Object

File f = new File(“d:/test.txt”);

//Delete the file

f.delete();

列出一个目录

要记住的是,文件对象代表着文件或者文件夹。所以假如想要列出一个目录里的所有文件,那你就要像下面这样把文件对象实例化:

//Create File Object

File dir = new File(“d:/test/”);

一旦有了合适的路径,你就可以在其内容中迭代了:

//List directory

if(dir.isDirectory())

{

String s[] = dir.list();

for (int i=0;

i

//Iterate through files

}

}

文件对象的list()方法将返回一个字符串数组,这会列出目录的内容——文件和文件夹都会被列出来。

字符串数组经常被用来向用户显示目录的内容,或者用于创建更多的文件对象来反复搜寻目录里所有的文件夹和子文件夹。

输入和输出流

流对象和过滤器对象经常会让程序员感到迷惑。图A概述了处理流和过滤器的抽象模型。

图A

抽象的输入和输出处理

输入

输入处理像下面这样工作:

输入流从输入设备读取字节。

输入过滤器从输入流里读取字节,并将数据返回给其调用者。

输出

输出处理以类似的方式工作:

输出过滤器接收数据,并把字节写到输出流。

输出流接收字节,并把它们写到输出设备。

这个简单的模型很灵活,因为你可以把其他过滤器串起来,从而扩展其处理能力,让其能够实现特定目标。

文件流和过滤器

让我们看上述模型的一个例子。在这个例子里,我们的目标是从文件系统里读取文件,对流进行缓冲,然后再用不同的名称把文件写到文件系统里。事实上,我们是在把文件从一个地方复制到另一个地方(见图B)。Listing A里的代码提供了达到这个目的的方法。

图B

文件输入和输出处理

要注重以下抽象模型和文件模型之间的关系:

FileInputStream是InputStream的子类。

BufferedInputStream是FilterInputStream的子类。

类似地:

BufferedOutputStream是FilterOutputStream的子类。

FileOutputStream是OutputStream的子类。

复制一个目录

Listing B使用了我们在Listing A里用过的copyFile方法,而且使用了文件的用于目录的list()方法,它把所有的文件(不是文件夹)从一个目录复制到了另一个目录。

这方法带有两个参数——要被复制文件夹的名称和我们要把文件复制到的文件夹。

阅读器和编写器超类

阅读器和编写器是用于所有字符流的超类。这两者都能处理Unicode字符,能够正确地处理本地编码和Unicode文本之间的相互转换。

Unicode是一项表示文本的标准,对诸如印度语、朝鲜语和汉语等字符集提供了支持。Java和xml都使用Unicode表示大量的人类语言。

当被读取的数据源是文本的时候,我们都要使用阅读器和编写器,而不是用InputStreams和 OutputStreams,后两者专门用于处理字节。

从文件读取文本

FileReader是InputStreamReader的子类,被用作从文件里读取文本。BufferedReader是阅读器的子类,能够提高字符输入操作的效率。

Listing C所包含的例子使用FileReader和BufferedReader从文件里读取文本。

把文本写入文件

FileWriter是OutputStreamWriter的子类,被用作把文本写入文件。BufferedWriter是编写器的子类,能够提高字符输出操作的效率。

Listing D使用FileWriter把Java字符串写入文件。

结论

本教程从解释文件对象开始,并把它作为理解输入和输出流,以及阅读器和编写器的基础。

你现在应该可以更好地了解了如何创建和删除文件,把文件从一个地方复制到另一个地方,以及读取和编写文本文件,所有这些都是在Java流对象的帮助下完成的。

[[The No.1 Link Start.]]

本文相关连接请点这里[[The No.1 Link End.]]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有