Java中的文件与磁盘操作技术详细解析

文章作者 100test 发表时间 2007:09:06 13:32:26
来源 100Test.Com百考试题网


1 如何获得某一个目录下的文件列表?

File MyDir = new File("C:/Windows/.").

String[] FileNames = MyDir.list().

2 如何实现一个打开文件或者是存储文件对话框?

AWT: FileDialog类 FilenameFilter类

Swing: JFileChooser类 FileFilter类

其中,基于Swing的解决方案功能更加强大,界面也更加美观。

3 利用FileReader/FileOutputStream拷贝中文文件出错?

利用如下代码片断拷贝中文文件不会出错:

int c.

while ((c = MyFileReader.read()) != -1)

MyFileWriter.write(c).

利用如下代码片断拷贝中文文件会导致文件内容错误:

int c.

while ((c = MyFileReader.read()) != -1)

MyFileOutputStream.write(c).

造成这个问题的原因是:FileReader.read()返回一个int,其取值范围是0 到65535,通常来说是两个字节的;FileWriter.write(int c)向文件写入一个int,通常来说也是两个字节的,如果某个字符的高位字节为空,那么其高位字节将被舍弃;FileOutputStream.write(int b)虽然接受一个int作为参数,实际上只向文件写入一个字节,如果传递过来的参数是一个双字节的汉字,其高位字节将被舍弃,造成文件内容错误。

建议:永远只使用InputStream/OutputStream进行IO操作。

利用如下代码片断拷贝中文文件不会出错:

int c.

while ((c = MyFileInputStream.read()) != -1)

MyFileOutputStream.write(c).

4 如何显示和存储拉丁语言中的特殊字符

使用统一码Unicode可以显示和存储拉丁语言中的特殊字符。具体应用范例

如下:

MyJTextArea.append("\u00E1").

MyJTextArea.append("\u00E2").

MyJTextArea.append("\u00E3").

MyJTextArea.append("\u00E4").

MyJTextArea.append("\u00E5").

MyFileOutputStream.write(MyJTextArea.getText().getBytes("UTF-8")).

MyFileOutputStream.close().

同样,在读取文件的时候也需要将读到的内容转换成统一码。

byte[] b = new byte[MyFile.length()].

FileInputStream in = new FileInputStream(MyFile).

in.read(b).

MyJTextArea.append(new String(b, "UTF-8")).

5 如何利用文件进行数据存取

对于一般的科学计算应用程序,DataInputStream和DataOutputStream类通常是最好的选择。这两个类提供了存取各种数据的方法。下面的范例演示了构造DataInputStream和DataOutputStream的方法:

MyDataInputStream = new DataInputStream(new FileInputStream(MyInputFile)).

MyDataOutputStream = new DataOutputStream(new FileOutputStream(MyOutputFile)).

利用ObjectInputStream和ObjectOutputStream同样可以进行数据存取,需要注意的是这样做增加了硬盘的开销,因为进行对象序列化过程添加了一些额外的信息。在利用ObjectInputStream和ObjectOutputStream进行通讯的时候,虽然数据发收过程得到了大大简化,但是对带宽的要求也大大的提高了。



相关文章


综合辅导:对于Linux各项系统开机服务的功能简介
综合辅导:如何在Linuxco ole中直接显示中文
用J 来实现文件下载功能的几种方式
怎样用J martUpload实现文件上传攻略
Java中的文件与磁盘操作技术详细解析
用Java编写简单的UDP网络通信程序实例
河南大学生下基层3年内考研初试加10分
中科院:未来5年向社会输送6万高级人才
中国科学院19日在四川举行08研招咨询会
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛