`
free_bird816
  • 浏览: 205933 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Java的文件与磁盘操作(转载)

    博客分类:
  • java
阅读更多



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

 

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

3 String[] FileNames = MyDir.list(); 

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

1 AWT: FileDialog类 +  FilenameFilter类 
2 

3 Swing: JFileChooser类 + FileFilter类

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



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



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

1 int  c; 
2 

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

5 MyFileWriter.write(c);

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

1 int  c; 
2 

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

5 MyFileOutputStream.write(c);

造成这个问题的原因是:FileReader.read()返回一个int,其取值范围是

0 到65535,通常来说是两个字节的;FileWriter.write(int c)向文件写

入一个int,通常来说也是两个字节的,如果某个字符的高位字节为空,那

么其高位字节将被舍弃;FileOutputStream.write(int b)虽然接受一个

int作为参数,实际上只向文件写入一个字节,如果传递过来的参数是一个

双字节的汉字,其高位字节将被舍弃,造成文件内容错误。



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



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

1 int  c; 
2 

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

5 MyFileOutputStream.write(c);

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



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

如下:

 1 MyJTextArea.append("\u00E1" ); 
 2 

 3 MyJTextArea.append("\u00E2" ); 
 4 

 5 MyJTextArea.append("\u00E3" ); 
 6 

 7 MyJTextArea.append("\u00E4" ); 
 8 

 9 MyJTextArea.append("\u00E5" ); 
10 

11 
12 
13 MyFileOutputStream.write(MyJTextArea.getText().getBytes("UTF-8" )); 
14 

15 MyFileOutputStream.close();

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

1 byte[] b = new byte [MyFile.length()]; 
2 

3 FileInputStream in = new  FileInputStream(MyFile); 
4 

5  in.read(b); 
6 

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

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



对于一般的科学计算应用程序,DataInputStream和DataOutputStream类通

常是最好的选择。这两个类提供了存取各种数据的方法。下面的范例演示了

构造DataInputStream和DataOutputStream的方法:

1 MyDataInputStream = new  DataInputStream( 
2 

3 new  FileInputStream(MyInputFile)); 
4 

5 MyDataOutputStream = new  DataOutputStream( 
6 

7 new FileOutputStream(MyOutputFile)); 

利用ObjectInputStream和ObjectOutputStream同样可以进行数据存取,需

要注意的是这样做增加了硬盘的开销,因为进行对象序列化过程添加了一

些额外的信息。在利用ObjectInputStream和ObjectOutputStream进行通讯

的时候,虽然数据发收过程得到了大大简化,但是对带宽的要求也大大的

提高了。



6 文件操作的基本原则是什么?



a. 避免多次访问磁盘,例如一次读出n个字节就比每次读出1个字节的访问

效率要高很多。

b. 避免多次访问操作系统。

c. 避免多次调用文件存取方法。

d. 避免将字节和字符混淆处理,在Java语言中字节与字符的概念是不一样

的,在涉及到双字节字符的问题上更是容易出错。



7 如何获得可用的硬盘空间?



目前尚未发现有任何干净利落的纯Java方法能够解决这个问题。通常的解

决方案是直接访问操作系统获得这些信息。有一个被称为JConfig的类库提

供了一些方法可以获得磁盘和文件信息,但是可以肯定这个类库使用了JNI

方法。



下载地址:http://www.tolstoy.com/samizdat/jconfig.html



如果你使用的是晕倒死系列操作系统,那么下面的方法也许能够获得正确

的结果。我之所以说也许,是因为我在多个晕倒死平台上作过实际测试,

在英文版的晕倒死上基本上都能够得到正确的结果,在中文版的晕倒死上

基本上都不能够获得正确的结果。

 1 String osname = System.getProperty("os.name" ); 
 2 

 3 String command = ""
 4 

 5 if (osname.indexOf("NT"> -1
 6 

 7 command = "c:\\winnt\\System32\\cmd.exe"
 8 

 9 else if (osname.indexOf("Windows"> -1
10 

11 command = "c:\\windows\\command.com"
12 

13 
14 
15 Process p =  Runtime.getRuntime().exec( 
16 

17 command + " /c dir > c:\\dir.txt" ); 
18 

19  p.waitFor(); 
20 

然后你需要做的是对得到的dir.txt文件进行分析。



如果你使用的是UNIX/Linux操作系统,你可以使用类似的方法来获得相关

信息。建议使用的命令是df -k > dir.txt。



8 我能够用Java来格式化我的硬盘或者是软盘么?



关于这个问题,想来在不久的将来仍然是不会有纯Java的解决方案了。如

果你一定要在你的Java应用程序里面格式化你的C盘的话,下面的这个方法

也许会有所帮助。当然,在你使用这个方法之前,请仔细备份好女朋友给你

的情书或者是记下和下一个网友约会的日期。



建立一个称为FormatDrive.bat的文件,该文件必须放在当前目录或者是系

统路径下,文件的内容如下:



rundll32.exe shell32.dll, SHFormatDrive



格式化硬盘的方法可以这样写:

 1 public void  FormatDrive() 
 2 

 3 
 4 

 5 try  
 6 

 7 
 8 

 9 Process p = Runtime.getRuntime().exec("FormatDrive.bat" ); 
10 

11  p.waitfor(); 
12 

13 catch  (Exception e) 
14 

15 
16 

17  System.out.println(e); 
18 

19 
20 

21 
22 

9 怎么知道我究竟有几个可用的存储设备?



在UNIX/Linux下你通常没有必要关心这个问题,只要记住那个斜杠就可以了。

在晕倒死下硬盘可以有多个逻辑分区,可应用下面的方法找出来:

 1 public void  ListDisks() 
 2 

 3 
 4 

 5 File[] roots =  File.listRoots(); 
 6 

 7 for (int i=0 ; i 
 8 

 9 

10  System.out.println(roots[i]); 
11 

12 
13 

14 
15 

本FAQ参考并引用或者是改写了www.esus.com网站提供的部分内容,特此说

明。该网站是一个优秀的Java程序设计网站,值得各位朋友经常前去访问。

摘自:
http://www.cn-java.com/target/news.php?news_id=992

分享到:
评论

相关推荐

    java写文件到磁盘

    java写文件到磁盘java写文件到磁盘java写文件到磁盘java写文件到磁盘

    Java操作系统磁盘调度算法

    在计算机操作系统中,磁盘调度算法是用于管理硬盘读写操作的一种重要技术,它优化了数据访问效率,降低了磁头移动的时间,从而提高了系统性能。本文将深入探讨三种常见的磁盘调度算法,并以Java编程语言为例,阐述...

    模拟文件系统(java编写且支持磁盘分块和写回磁盘)

    对原资源 模拟文件系统(Java版)>>进行了修复,修复了磁盘分块的bug,添加了写回硬盘的功能。这是一个用Java实现的一个虚拟文件系统,支持多用户使用,模拟了数据分块,实现了一些基本的文件目录操作,如创建目录,...

    Java获取磁盘使用率

    在Java编程中,获取磁盘使用率是一项常见的系统监控任务,尤其对于服务器管理与性能分析至关重要。磁盘使用率能够反映出系统中磁盘空间的占用情况,有助于及时发现并处理可能的存储问题。本篇文章将详细讲解如何使用...

    操作系统文件及磁盘管理

    操作系统是计算机系统的核心组成部分,它负责管理和控制硬件资源,尤其是文件和磁盘的管理。在C#编程语言中,我们可以利用.NET Framework提供的类库来实现对操作系统文件和磁盘的操作。下面将详细介绍操作系统文件和...

    java写的模拟操作系统磁盘管理系统程序

    用java写的操作系统的磁盘管理程序,有详细的源代码和代码注释,如有错漏,欢迎指正…………

    java实现windows文件系统操作监控

    在Java编程环境中,实现Windows文件系统的操作监控是一个有趣且实用的技术挑战。这涉及到对系统底层事件的捕获,通常需要借助于系统钩子(System Hooks)的概念。在Java中,虽然原生支持并不完善,但我们可以通过...

    java操作共享文件

    Java提供了一些库来实现这一功能,其中之一就是jcifs库,它是一个开源的Java SMB(Server Message Block)客户端,使得Java程序能够方便地操作Windows网络共享文件。在本文中,我们将深入探讨如何使用jcifs库中的...

    模拟实现采用二级目录结构的磁盘文件系统中的文件操作

    - **注意事项**:在打开文件时需要验证文件属性与操作类型的匹配性。 2. **关闭文件(Close)**: - **定义**:完成文件操作后,通过“关闭文件”操作释放资源。 - **作用**:确保文件更改被正确保存到磁盘,并...

    模拟实现采用二级目录结构的磁盘文件系统中的文件操作。

    模拟实现采用二级目录结构的磁盘文件系统中的文件操作。 文件系统是操作系统中管理和存取信息的机构,它具有“按名存取”的功能,不仅方便用户,而且能提高系统效率且安全可靠。 在用户程序中可使用文件系统提供的...

    磁盘调度算法 操作系统作业 java模拟磁盘调度,图形界面

    在实际开发中,Java的多线程特性可以帮助我们实现并发的磁盘调度模拟,让I/O操作与用户交互并行进行,提高程序响应性。同时,通过调试工具,如JProfiler,可以对模拟过程进行性能分析,以优化算法。 总之,磁盘调度...

    Java SE程序 字节文件保存到磁盘DateInputStream类

    Java SE程序 字节文件保存到磁盘DateInputStream类Java SE程序 字节文件保存到磁盘DateInputStream类Java SE程序 字节文件保存到磁盘DateInputStream类Java SE程序 字节文件保存到磁盘DateInputStream类Java SE程序 ...

    磁盘调度算法-1 java 广工

    在Java中实现这些算法,需要理解数据结构如队列和栈,以及对磁盘I/O操作的基本模拟。例如,可以创建一个请求队列,然后根据不同的调度策略调整队列的顺序,最后模拟磁盘臂的移动来执行请求。 在"MYOSDesign"文件中...

    操作系统实验 Java模拟处理器调度 存储管理 磁盘移臂调度 文件管理 算法

    处理器调度算法: 先来先服务, 时间片轮转, 短作业优先, 最高响应比优先 存储管理: FIFO, LRU 磁盘移臂调度: SSTF, SCAN 文件管理: 运用空闲盘块表的方式组织磁盘空间, 模拟文件的 create() 和 delete() 操作

    java 查询本地磁盘信息

    java 查询本地磁盘信息

    OS操作系统课程设计模拟磁盘管理系统SCAU

    磁盘文件模拟系统 介绍 华南农业大学SCAU操作系统OS课程设计,JAVAFX开发,可以实现...界面交互使用的是JAVA中的绑定与监听,能够根据数据变化时刻更新。数据以对象保存在文件中 JAVAFX依赖的包放在了lib文件夹中。

    java获取磁盘名称、磁盘大小、磁盘剩余空间

    java获取磁盘名称、磁盘大小、磁盘剩余空间

    易语言模块磁盘操作.rar

    3. 磁盘操作:磁盘操作是指对硬盘、U盘等存储设备上的文件和目录进行的操作,包括但不限于读取文件内容、写入文件、创建新文件或目录、删除文件或目录、重命名文件或目录、移动文件或目录等。 4. 文件操作函数: -...

    操作系统课程设计报告-建立基于磁盘存储设备的FAT文件系统_磁盘文件系统

    操作系统课程设计报告的主题是建立基于磁盘存储设备的FAT(File Allocation Table)文件系统,这一任务对于物联网专业的学生来说,旨在深入理解和实践文件系统的核心概念。文件系统是操作系统的重要组成部分,它负责...

Global site tag (gtag.js) - Google Analytics