IO输入输出流学习笔记(第二篇)(JAVA)

来源:互联网 发布:php基本语法 编辑:程序博客网 时间:2024/06/10 19:39

一、摘要 

   本文继续上一篇IO文章继续介绍IO输入输出流的基础知识,读者可能发现对于前一篇IO文章的一些处理文件的类的操作有一些繁琐,并且代码结构不管怎么设计都显得有些复杂。接下来的文章目标就是介绍几个Java常用(新出)的一些类或工具类。不足之处请指正。

二、RandomAccessFile

RandomAccessFile类是Java输入/输出流体系中功能非常丰富的文件内容访问类,注意是文件内容,所以可是看出 RandomAccessFile类的最大局限就是只能读写文件,不能读写其他IO节点(eg:已经存在的流)。但是从类名也可以看出Random,字面理解是随机,也就是此类提供随机访问文件的功能,其实这里说的随机就是任意的意思,即提供任意读写文件,程序可以直接跳到文件的任意地方进行读写数据。并且RandomAccessFile对象包含了一个记录指针,可以自由地移动改记录指针。

RandomAccess有两个构造器,两个参数,一个是使用File参数指定文件本身,一个是mode参数。

mode参数包含四个值: 1. “r” 以只读的方式打开文件  2. “rw” 以读写的方式打开指定文件,如果文件不存在,则会创建文件。

    3. “rws”   4. “rwd”

简单代码示例如下:

package Kobe;import java.io.*;public class RandomFileTest {public static void main(String[] args) {try {RandomAccessFile raf = new RandomAccessFile("E:/javastudy/eclipse/JZ/src/Kobe/RandomFileTest.java", "r");System.out.println("start:: " + raf.getFilePointer());raf.seek(260);byte[] bb = new byte[1024];while(raf.read(bb) > 0) {System.out.print(new String(bb, 0, 1024));}}catch(IOException ioe) {ioe.printStackTrace();}}}
如上述代码所示,创建RandomAccessFile对象,构造器初始化,传入指定文件作为参数,“r”指定以只读方式打开文件,raf引用调用seek方法是RandomAccessFile类的方法,用于指定记录指针的位置。参数是260,即从260字节处开始输出文件内容。接下来的代码与原来的InputSream没有差别。

一下代码示范了如何向指定文件后追加内容,办法就是讲文件记录指针移动到文件的最后。代码如下

package Kobe;import java.io.*;public class AppendContent {public static void main(String[] args) {try {RandomAccessFile raf = new RandomAccessFile("E:/javastudy/eclipse/JZ/src/Kobe/outKobe.txt", "rw");raf.seek(raf.length());raf.write("append :".getBytes());}catch(IOException ioe) {ioe.printStackTrace();}try {//FileStream fs = new FileStream()FileInputStream fis = new FileInputStream("E:/javastudy/eclipse/JZ/src/Kobe/outKobe.txt");byte[] bbb = new byte[1024];while(fis.read(bbb) > 0) {System.out.println(new String(bbb, 0, 1024));}}catch(Exception e) {e.printStackTrace();}}}
上述代码的第一个try语句的作用域内直接将文件指针移动到文件的最后(raf.length),然后开始讲文件中输出(追加)内容(append),第二个try-catch是为了将文件内容打印到屏幕上。每次运行一遍上述代码都会在文件的最后添加一个append字符串。

三、NIO.2 

Java7对nio进行了很大的改进,全面支持文件io系统访问支持,本文介绍Files和Paths两个工具类。Files是一个操作文件的工具类,直接看代码:

package Kobe;import java.io.*;import java.nio.*;import java.nio.charset.Charset;import java.nio.file.Files;import java.nio.file.Paths;import java.util.*;public class FileTest {public static void main(String[] args) throws Exception {Files.copy(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java"), new FileOutputStream("E:/javastudy/eclipse/JZ/src/Kobe/zqw.txt"));System.out.println("jugging FileTest.java is Hidden? " + Files.isHidden(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java")));List<String> lines = Files.readAllLines(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java"), Charset.forName("gbk"));System.out.println(lines);System.out.println("文件大小为  " + Files.size(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/FileTest.java")));List<String> pom = new ArrayList();pom.add("世界那么大");pom.add("我想去看看");Files.write(Paths.get("E:/javastudy/eclipse/JZ/src/Kobe/nbnb.txt"), pom, Charset.forName("gbk"));}}
上述代码是先FileTest.java文件内容copy到zqw.txt中,利用Files提供的readAllLines方法将文件每行都读出来存到List容器中并将List内容打印出来。Charset类是nio包提供的编解码类。再次创建一个动态数组即ArrayList,添加两个字符串进去,然后利用Paths.get方法指定文件,然后将ArrayList内容写入文件中。
以上内容是对JAVA文件io的工具类的基本介绍,望指教。

  

0 0