今天跟大家分享一下javase中的关于I/O的操作:
有时我们需要在文件的末尾追加一些内容,在这时用RandomAccessFile就很好。
这个类有两个构造方法:
其中mode 参数指定用以打开文件的访问模式。允许的值及其含意为:
"r" 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException。
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd" 打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。
"rws" 和 "rwd" 模式的工作方式极其类似 FileChannel 类的 force(boolean) 方法,分别传递 true 和 false 参数,除非它们始终应用于每个 I/O 操作,并因此通常更为高效。如果该文件位于本地存储设备上,那么当返回此类的一个方法的调用时,可以保证由该调用对此文件所做的所有更改均被写入该设备。这对确保在系统崩溃时不会丢失重要信息特别有用。如果该文件不在本地设备上,则无法提供这样的保证。
"rwd" 模式可用于减少执行的 I/O 操作数量。使用 "rwd" 仅要求更新要写入存储的文件的内容;使用 "rws" 要求更新要写入的文件内容及其元数据,这通常要求至少一个以上的低级别 I/O 操作。
如果存在安全管理器,则使用 file 参数的路径名作为其参数调用它的 checkRead 方法,以查看是否允许对该文件进行读取访问。如果该模式允许写入,那么还使用该路径参数调用该安全管理器的 checkWrite 方法,以查看是否允许对该文件进行写入访问。
如果要在文件的结束点追加内容,那就用第一个构造方法,调用RandomAccessFile的seek(long lg)方法,该方法传递进去一个long型的数据,我们正好可以把file.length()传递进去,这样就按照要求在文件末尾追加内容。
但这里可能会遇到了乱码问题,如果用的RandomAccessFile的writeBytes(String s)方法写入内容,就会出现乱码,所以最好是用write(byte[] b)方法,例如:String s = "中文"; raf.write(s.getBytes());这样就很好的解决了乱码问题。关于这两种方法,许多人认为好像差不多,其实是完全相反的方式,writeBytes(String s)方法将中文拆成两个字节写进文本,所以会造成乱码,write(byte[]
b)方法是将每两个字节合成一个中文并写时文本,所以不会出现乱码。
我们还可以调用writeUTF(String str)方法避免乱码。
结下来还有一个解决换行的问题,写了“/n”不管用啊。实际上要用“/r/n”才行。
“/r”即回车,回到一行的开头。“/n”即换行,另起一行。这大家都是知道的。
我们在程序里写文件的时候所谓的“回车符”确切的说应该是“回车换行符”。
在windows系统下,回车换行符号是“/r/n”,但是在Linux等系统下是没有“/r”符号的,我们一般都是在window下,所以说在用程序写文件是应该是“/r/n”才对。
补充:为了适应跨平台需求,建议回车换行用System.getProperty("line.separator")。
分享到:
相关推荐
JAVA IO流小结 JAVA IO流是指Java语言中用来实现输入/输出操作的机制。IO流是指任何有能力产出数据的数据源对象或者有能力接收数据的数据源对象。他屏蔽了实际的I/O设备处理数据的细节。 一、流的定义和分类 流是...
- **小结** - Java 的 I/O 包提供了丰富的类来处理文件和流,包括基本的字节流、字符流、文件流、缓冲流等。 **1.4 Java中的一些常用词汇** - **术语解释** - 如继承、封装、多态等。 **1.5 J2SE学习中的30个...
8. 数据流小结: 在Java I/O编程中,理解不同类型的流及其用途至关重要。字节流和字符流分别处理二进制和文本数据,过滤流提供了额外的功能,管道流实现了线程间的通信,对象流使得对象可以持久化。掌握这些基础,...
1.9 本章小结 22 本章练习 22 第2章 理解面向对象 23 2.1 面向对象 24 2.1.1 结构化程序设计简介 24 2.1.2 程序的三种基本结构 25 2.1.3 面向对象程序设计简介 27 2.1.4 面向对象的基本特征 28 2.2 UML...
#### 九、小结 Java I/O系统是Java编程的重要组成部分,通过掌握不同的流类及其使用方法,可以有效地处理文件读写、网络通信等常见的输入输出操作。了解I/O流的基本概念、分类以及常用的类和接口,可以帮助开发者更...
#### 小结 **RandomAccessFile** 为Java开发者提供了一种高效灵活的方式来处理文件中的数据。虽然它的功能强大,但在选择使用时需考虑具体的使用场景和技术需求。特别是在大数据量处理、高性能要求或并发环境中,...
1.5本章小结18 第2章Java语言基础19 2.1Java语言的特点19 2.2Java程序的构成21 2.3数据类 型23 2.3.1基本数据类型23 2.3.2常量25 2.3.3变量26 2.3.4整型数据27 .2.3.5浮点型数据29 2.3.6字符型数据30 ...
小结 在 Java 中,我们可以使用 RandomAccessFile 类或 FileWriter 类来实现文件的尾部添加数据。两种方法都有其优缺点,需要根据实际情况选择合适的方法。在实际开发中,我们需要根据文件的大小、读写频率等因素...
6.11 小结: 本章涵盖了Java中数据流的各个方面,从基本的输入输出方法到高级的文件操作和对象序列化,为开发者提供了全面的工具来处理数据的传输和存储。 理解这些知识点对于进行Java编程,尤其是涉及到文件操作、...
FileReader和FileWriter的局限性在于它们都是单线程的,如果需要多线程操作同一文件,可能需要考虑使用RandomAccessFile类,它可以任意位置读写,支持并发。 在Java中,I/O流的关闭是非常重要的。当不再需要流时,...
1.5小结 第2章程序设计基础:变量及其运算 2.1认识变量 2.1.1变量的定义 2.1.2变量有哪些类型 2.2如何使用变量 2.2.1如何使用整型变量 2.2.2如何使用浮点型变量 2.2.3如何使用字符型变量 2.2.4如何使用布尔...
23. RandomAccessFile类在Java中用于随机访问文件,创建实例时可以指定"r"(读取)或"rw"(读写)权限。 24. 文件系统和数据库系统的主要区别在于数据库系统具备特定的数据模型,能更好地管理和检索数据。 25. 在...
- **深度为7的满二叉树叶子结点数**: \(2^6 = 64\)。 - **计算公式**: \(2^{(深度-1)}\)。 ### 12. 输入输出设备 - **键盘**: 输入设备。 - **显示器**: 输出设备。 - **功能**: - 键盘用于输入文本和命令。 - ...