Java文件与磁盘操作技术详解 - 编程入门网
Java文件与磁盘操作技术详解时间:2007-05-30 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进行通讯的时候,虽然数据发收过程得到了大大简化,但是对带宽的要求也大大的提高了。 Java文件与磁盘操作技术详解(2)时间:2007-05-30 6 文件操作的基本原则是什么?a. 避免多次访问磁盘,例如一次读出n个字节就比每次读出1个字节的访问效率要高很多。 b. 避免多次访问操作系统。 c. 避免多次调用文件存取方法。 d. 避免将字节和字符混淆处理,在Java语言中字节与字符的概念是不一样的,在涉及到双字节字符的问题上更是容易出错。 7 如何获得可用的硬盘空间? 目前尚未发现有任何干净利落的纯Java方法能够解决这个问题。通常的解决方案是直接访问操作系统获得这些信息。有一个被称为JConfig的类库提供了一些方法可以获得磁盘和文 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |