转自:http://hi.baidu.com/o%C6%DF%D7%D0o/blog/item/a3286aecdeb6082263d09fc7.html
Java文件操作的两个“踢不死”
2008年05月20日 星期二 11:23
“踢不死”就是英文Tips的意思
1. 判断两个路径是否指向同一个文件
我们知道在Windows操作系统下文件名是不区分大小写;另外在不同的操作系统下可以用 . 来表示当前目录,或者直接只写文件名也表示默认为当前目录,例如当前目录是D:\work,那么文件D:\work\aaa.txt和.\Aaa.txt 实际上指的是磁盘上的同一个文件,但是程序怎么来判断这种情况呢?请看下面代码
/**
* 判断两个File对象是否指向同一个文件
* @throws IOException
*/
protected static void testCanonicalFile() throws IOException{
File f1 = new File("D:\work\AAA.txt");
File f2 = new File("./aaa.txt");
boolean sameFile = f1.getCanonicalFile().
equals(f2.getCanonicalFile());
System.out.println(sameFile);
}
通过getCanonicalFile方法来获取某个文件在当前操作系统下对应的目标文件,只要两个路径指向同一个文件,则两个文件对象的getCanonicalFile返回的对象一定相等,因此上面的例子打印的值是 true.
2. 强制将文件写入磁盘
操作系统包括硬件为了提供磁盘IO的性能,都会加入一个缓冲。当应用程序在读写磁盘的时候事实上是在读写缓冲区的内容,然后由操作系统负责将缓冲的 内容写入磁盘空间,这样可以大大提供应用程序的IO性能,但是同样带来一个问题是可能导致数据的丢失,当应用程序写入数据后发生系统异常或者突然断电,而 这个时候操作系统还没将缓冲区的数据写入磁盘时候就会发生这种情况。因为在某些应用场合,我们的程序需要确切的将数据写入到磁盘上,我们可以使用下面的代 码来进行处理:
/**
* 强制将文件写入磁盘,放置因机器意外导致文件丢失
* @throws IOException
*/
protected static void testFlushToDisk() throws IOException{
FileOutputStream fos = new FileOutputStream("D:\\aaa.txt");
FileDescriptor fd = fos.getFD();
fos.write("你好,Java自由人".getBytes());
fos.flush();
fd.sync();
}
通过获取文件对象的描述符,也就是FileDescriptor实例,然后调用sync方法即可将文件写入磁盘。
分享到:
相关推荐
### 知识点详解 #### 一、二级目录结构及其...通过以上分析可以看出,本实习通过模拟实现采用了二级目录结构的磁盘文件系统中的文件操作,不仅加深了对文件系统原理的理解,还锻炼了数据结构设计和算法实现的能力。
模拟实现采用二级目录结构的磁盘文件系统中的文件操作。 文件系统是操作系统中管理和存取信息的机构,它具有“按名存取”的功能,不仅方便用户,而且能提高系统效率且安全可靠。 在用户程序中可使用文件系统提供的...
编写带缓存的文件操作类 从执行体程序库中的CLLogger类可知,通过缓存要写入文件中的数据,能够提高读写磁盘的性能 请编写一个文件操作的封装类,其要求如下: 需要提供open/read/write/lseek/close等函数的封装函数...
CANoe/CAPL 文件操作脚本是用于自动化处理CANoe环境中的配置、数据记录和分析的编程工具。CANoe是一款广泛应用于汽车电子系统的诊断、测试和测量的软件,而CAPL(CANoe Application Programming Language)是CANoe内...
在本教程中,我们将重点讨论如何通过JNI在Android应用中进行文件操作。 首先,要使用JNI,我们需要在Java类中声明native方法。例如,我们可以声明一个名为`readFileFromNative`的方法: ```java public class ...
java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java文件操作类java...
大学本科操作系统实验 《磁盘文件操作模拟C语言》,花了两天的时间调试。
原数据存放在StreamingAsset中,首次启动复制到persistentDataPath,以后进行更新和读取都在persistentDataPath中使用File进行文件操作。需要恢复书序的时候从StreamingAsset中获取即可。
C#编程 文件操作 FileCopyPlan(源码)(源码)C#编程 文件操作 FileCopyPlan(源码)(源码)C#编程 文件操作 FileCopyPlan(源码)(源码)C#编程 文件操作 FileCopyPlan(源码)(源码)C#编程 文件操作 FileCopyPlan(源码)(源码)...
本项目“C++使用hookapi监控文件操作程序”正是基于这一技术,用于实现对文件系统事件的实时监控。下面将详细介绍相关的知识点。 首先,`hookapi`是指Windows API中的钩子(Hook)机制。钩子是一种让程序能够监视...
js实现的读写文件,文件放在的c:\12.txt里
C#编程 文件操作 CreatePDFDocument(源码)(源码)C#编程 文件操作 CreatePDFDocument(源码)(源码)C#编程 文件操作 CreatePDFDocument(源码)(源码)C#编程 文件操作 CreatePDFDocument(源码)(源码)C#编程 文件操作 ...
C#编程 文件操作 ManageFileByType(源码)(源码)C#编程 文件操作 ManageFileByType(源码)(源码)C#编程 文件操作 ManageFileByType(源码)(源码)C#编程 文件操作 ManageFileByType(源码)(源码)C#编程 文件操作 ...
C#编程 文件操作 FileBatchChangeName(源码)(源码)C#编程 文件操作 FileBatchChangeName(源码)(源码)C#编程 文件操作 FileBatchChangeName(源码)(源码)C#编程 文件操作 FileBatchChangeName(源码)(源码)C#编程 文件...
C#编程 文件操作 DeleteDirByDG(源码)(源码)C#编程 文件操作 DeleteDirByDG(源码)(源码)C#编程 文件操作 DeleteDirByDG(源码)(源码)C#编程 文件操作 DeleteDirByDG(源码)(源码)C#编程 文件操作 DeleteDirByDG(源码)...
C#编程 文件操作 AllowDropFile(源码)(源码)C#编程 文件操作 AllowDropFile(源码)(源码)C#编程 文件操作 AllowDropFile(源码)(源码)C#编程 文件操作 AllowDropFile(源码)(源码)C#编程 文件操作 AllowDropFile(源码)...
操作系统实验四的核心目标是设计和实现一个简单的...通过这样的实验,学生能够深入理解文件系统如何管理磁盘空间,跟踪文件元数据,以及如何执行基本的文件操作,这对理解和设计更复杂的操作系统有着至关重要的作用。
根据提供的信息,我们可以总结出以下关于C#文件操作的关键知识点: ### 1. 创建文件夹 在C#中,可以通过`System.IO`命名空间中的`Directory.CreateDirectory`方法来创建一个新的文件夹。 ```csharp using System....
在VC++环境中进行PDF文件操作是一项常见的任务,尤其在开发桌面应用程序时,可能需要读取、编辑或生成PDF文档。本篇文章将详细讲解如何在VC++中实现这些功能,主要涉及的技术点包括PDF文件的基本概念、PDF库的使用...
在“LabVIEW文件操作_数据存储 VI源程序”这个主题中,我们将深入探讨如何使用LabVIEW进行文件操作,特别是数据的读取与存储。 一、LabVIEW的数据存储 1. **电子表格(Excel)文件操作**:LabVIEW提供了强大的...