今天一个朋友问了我一个javase的知识,是关于I/O的操作,他要在文件的末尾追加一些内容,在这当中遇到了一些问题。
朋友用的是RandomAccessFile来做写入,这个类有两个构造方法
RandomAccessFile(File file, String mode) 创建从中读取和向其中写入(可选)的随机访问文件流,该文件由 File 参数指定。 |
RandomAccessFile(String name, String mode) 创建从中读取和向其中写入(可选)的随机访问文件流,该文件具有指定名称。 |
如果要在文件的结束点追加内容,那就用第一个构造方法,调用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”才对。
http://blog.youkuaiyun.com/liuhe688