`
free_bird816
  • 浏览: 209559 次
  • 性别: 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

分享到:
评论

相关推荐

    C#合并word文档类

    5. **优化性能**:如果"DocMerger.cs"考虑了性能,那么它可能会实现一些优化策略,比如批量操作、延迟加载或者使用内存流来减少磁盘I/O。 6. **设计模式**:这个类可能遵循单一职责原则,使得合并功能封装在一个...

    hsqldb使用(转载)

    - **In-Process (Standalone)模式**:在这种模式下,数据库与应用程序在同一进程中运行,访问速度最快。但是,它仅限于当前进程,其他工具无法同时访问。JDBC连接字符串类似于`jdbc:hsqldb:file:/opt/db/testdb`。 ...

    fresco,Andriod开发

    不管是通过网络、本地文件、content provider还是本地资源,它都把图片压缩并缓存到磁盘,并且把内存作为第二缓存存储着解码后的图片 作者:r17171709 链接:https://www.jianshu.com/p/8ff81be83101 來源:简书 ...

    服务器系统平台技术规格书收集.pdf

    * 主机一和主机二为并行存取操作数据库方式,并结合硬件HA系统,实现并行计算,提高转载、查询、备份、维护的时间性能,突破主机内存和系统体系结构 * 主机二采用分区技术,划分一个分区作为逻辑主机三,提供应用...

    数分1.11Tableau安装及使用教程

    数分1.11Tableau安装及使用教程

    软考信息系统运行管理员:涵盖信息系统运维、安全、架构及技术标准的多维考核

    内容概要:本文主要围绕着计算机信息系统运行管理员考试展开讨论,详细介绍了有关信息系统在运维中的各种问题及其应对方案。具体而言,文中不仅列举出了不同类型的信息系统对其本身的要求,而且还深入探讨了运维管理中面临的挑战和技术手段。另外,文章特别提及了一些特定类型的系统(例如政府系统和财务管理等),并指明在面对它们时需要考虑的安全级别、稳定性等关键要素;同时也强调了良好的文档管理和合理的设施运维对象划分,以及软硬件的选择与维护。同时文章还讲解了多种工具的作用(比如Nagios),以及硬件如计算机机房和UPS的具体规格和要求;并且讲述了关于变更管理和发布管理等的概念与实际应用场景。此外,在最后一部分内容里也谈到了云架构及其各个构成部分。 适用人群:本文适合即将参加软考信息运行管理员认证的专业人士,也适用于希望深入了解信息系统运作、管理和维护的技术从业者和相关领域的管理人员。 使用场景及目标:本资料旨在辅助考生掌握信息系统的高效、稳健地构建与运营所需的知识和技术,帮助他们顺利通过软考的同时提升实战经验;同时也为企业信息化建设提供了宝贵的理论基础和实践指南。 其他说明:虽然本文聚焦于特定职业资格证书

    伪知识图谱:元路径引导检索与图内文本技术,助力RAG增强型LLM

    大型语言模型(LLMs)的出现彻底改变了自然语言处理。然而,这些模型在从大量数据集中检索精确信息时面临挑战。检索增强生成(RAG)旨在通过结合外部信息检索系统来增强LLMs,从而提高响应的准确性和上下文性。尽管有所改进,RAG在高容量、低信息密度数据库中的全面检索仍然存在困难,并且缺乏关系意识,导致答案碎片化。 为了解决这一问题,本文介绍了伪知识图谱(PKG)框架,该框架通过集成元路径检索、图内文本和向量检索到LLMs中,旨在克服这些限制。通过保留自然语言文本并利用各种检索技术,PKG提供了更丰富的知识表示并提高了信息检索的准确性。使用Open Compass和MultiHop-RAG基准进行的广泛评估表明,该框架在管理和处理大量数据及复杂关系方面具有有效性。

    zedr_clean-code-python_1741402803.zip

    python学习教程

    kibana-7.10.2 docker镜像压缩包,百度网盘

    请到网盘中自取压缩包,此包为kibana-7.10.2 镜像压缩包,是通过现有镜像导出来的,主要是为了解决有些机器无法连接外网,导致无法下载镜像 加载镜像: docker load -i kibana-7.10.2.tar 查看镜像: docker images 备注:elk此镜像配套资源,相同版本的elasticsearch和logstash,请在我的资源中搜索其他镜像

    UniApp开发一个简单的记事本应用文字教程

    UniApp开发一个简单的记事本应用文字教程

    基于Andorid的音乐播放器项目设计(QQ音乐).zip

    基于Andorid的音乐播放器项目设计(QQ音乐)实现源码,主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。

    编程语言_Python_Cookbook_管理工具_1741398354.zip

    python学习资源

    React Developer Tools在谷歌拓展的应用商城下载不了任何解决

    React Developer Tools在谷歌拓展的应用商城下载不了任何解决

    【毕业设计-java】springboot-vue健身房管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    【毕业设计-java】springboot-vue健身房管理系统源码(完整前后端+mysql+说明文档+LunW).zip

    网络通信_批量IP管理_远程命令执行_工具_1741401998.zip

    python学习资源

    在Anaconda中创建和配置PyTorch环境的详细步骤

    本文提供了一套完整的指南,帮助用户在Anaconda中配置PyTorch环境,便于深度学习开发。首先,用户需要确保安装Anaconda,并通过Anaconda Prompt创建一个新的虚拟环境,以隔离项目依赖。创建好环境后,用户可以根据所用操作系统以及CUDA版本,选择适合的安装命令。对于Windows和Linux用户,提供了安装PyTorch、TorchVision和TorchAudio的具体命令,包括CUDA Toolkit的版本选择。macOS用户则可以安装仅支持CPU的版本。安装完成后,通过简单的Python代码验证PyTorch是否成功安装以及GPU的可用性。文中还列出了常见问题及解决方法,帮助用户快速排查安装过程中可能遇到的障碍。通过遵循这些步骤,用户可以顺利搭建起一个专属的PyTorch开发环境,提升深度学习的工作效率和体验。

    药品同步线程池模式_自动超时退出机制_1741403804.zip

    python学习教程

    数据结构学习指南:从资源到实战全方位提升编程技能

    内容概要:本文汇总了学习数据结构的相关资源,旨在帮助读者系统化地理解和掌握这一计算机科学的基础概念。文中首先列举了一系列权威在线学习资源,包括知名教授的主页、在线编程平台LeetCode和技术博客,这些资源不仅理论丰富,还提供大量的实例和练习机会。接着推荐了几本经典的书籍,如《算法导论》、《大话数据结构》,适合不同程度的学习者深入理解算法和数据结构的细节。此外,还特别提及了几门高质量的网络课程,能够为初学者提供清晰的学习路径。最后强调通过动手实践,如动态数组的C语言实现以及算法题目的刷题练习,是提高编程技能的有效途径。 适合人群:对于想要系统学习并掌握数据结构的程序员及爱好者。 使用场景及目标:适用于个人自学或者课堂教学,目的是通过综合使用理论学习、实践操作来达到对数据结构和算法有全面深刻的认识。 其他说明:本文提供了丰富的链接,让读者可以直接访问各个优质教育资源进行深度探究,鼓励大家积极参与讨论,相互分享心得体验,形成良好的互动交流氛围。

    QMI8658 Datasheet

    QMI8658 Datasheet

Global site tag (gtag.js) - Google Analytics