RandomAccessFile(随即读取)操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd"

原创 2016年08月29日 17:00:55

'r' 以只读方式打开。调用结果对象的任何 write 方法都将导致抛出 IOException
"rw" 打开以便读取和写入。如果该文件尚不存在,则尝试创建该文件。
"rws" 打开以便读取和写入,对于 "rw",还要求对文件的内容或元数据的每个更新都同步写入到底层存储设备。
"rwd"   打开以便读取和写入,对于 "rw",还要求对文件内容的每个更新都同步写入到底层存储设备。

JDK 1.6上面写的每次write数据时,"rw"模式,数据不会立即写到硬盘中;而“rwd”,数据会被立即写入硬盘。如果写数据过程发生异常,“rwd”模式中已被write的数据被保存到硬盘,而“rw"则全部丢失。

  1. /* 
  2. 这类不算是IO体系中的子类。 
  3. 而是直接继承Object 
  4. 但是它是IO包中的成员,因为它具备读和写的功能。 
  5. 能完成读写的原理是内部封装了字节输入流和输出流。 
  6. 而且内部还封装了一个数组,通过指针对数组的元素进行操作。 
  7. 可通过getFilePointer获取指针位置。 
  8. 也可通过seek改变指针的位置。 
  9. 通过构造函数可以看出,该类只能操作文件。 
  10.  
  11. 操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd" 
  12.  
  13. 如果模式为只读r。则不会创建文件,而是会去读取一个已经存在的文件,如果读取的文件不存在则会出现异常。 
  14. 如果模式为rw读写。如果文件不存在则会去创建文件,如果存在则不会创建。 
  15.  
  16. 可以实现多线程下载!因为seek可以调节指针,这样可以开启多个线程,来写相同间隔的数据。 
  17. *public class Day19_05 {

        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    //        test_RandomAcessFile_1();
            test_RandomAcessFile_2();
        }

        //seek()设置文件指针,调用写入方法,会覆盖指针位置开始的数据
        public static void test_RandomAcessFile_2(){
            
            RandomAccessFile raf1 = null;
            try {
                raf1 = new RandomAccessFile("E:\\abc.txt","rw");
                raf1.seek(2);
                raf1.write("QQ".getBytes());
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                
                try {
                    if(raf1 != null)
                       raf1.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            
        }
        
        //读取D:\\abc.txt文件、写入E:\\abc.txt文件
        public static void test_RandomAcessFile_1(){
            RandomAccessFile raf1 = null;
            RandomAccessFile raf2 = null;
            try {
                raf1 = new RandomAccessFile("D:\\abc.txt","r");
                raf2 = new RandomAccessFile("E:\\abc.txt","rw");
                byte[] by = new byte[1024];
                int len = 0;
                while((len = raf1.read(by)) != -1){
                    raf2.write(by, 0, len);
                }
            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                
                try {
                    if(raf2 != null)
                       raf2.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                try {
                    if(raf1 != null)
                       raf1.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                
            }
            
            
        }
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

RandomAccessFile 替换文件内容 并写入

private static boolean modifyFileContent(String filePath, String replaceContent, String regex) { ...

Java RandomAccessFile用法

RandomAccessFile RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了。这些记录的大小不必相同;但是其大小和位...
  • akon_vm
  • akon_vm
  • 2012年04月05日 17:01
  • 216738

RandomAccessFile类使用详解

RandomAccessFile类使用详解疯狂java讲义读书笔记之RandomAccessFile类的使用详解1.RandomAccessFile特点  RandomAccessFile是java ...

Java IO操作——简单了解RandomAccessFile随机读写文件操作类的使用

学习目标

atitit.RandomAccessFile rws rwd 的区别于联系

atitit.RandomAccessFile rws rwd 的区别于联系   1. Rw rws  rwd1 2. "rws" 模式1 3. rwd"模式2     1. Rw rw...
  • attilax
  • attilax
  • 2016年03月14日 00:33
  • 2199

Java IO的RandomAccessFile的使用

现有如下的一个需求,向已存在1G数据的txt文本里末尾追加一行文字,内容如下“Lucene是一款非常优秀的全文检索库”。可能大多数朋友会觉得这个需求很easy,说实话,确实easy,然后XXX君开始实...

(45)使用RandomAccessFile向中间部分插入内容防止覆盖后面的内容方法

package com.xuan.io; import java.io.File; import java.io.FileInputStream; import java.io.FileOutput...

用RandomAccessFile来读写文件

用RandomAccessFile来读写文件
  • sanqima
  • sanqima
  • 2014年05月14日 13:06
  • 986

RandomAccessFile 文件的插入和删除一行文字

文件中的插入一行字符目前没找到什么好方法,只能将数据读出来,然后在该插入的地方插入string后再写回去 [java] view plain copy ...

RandomAccessFile(随即读取)操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd"

/* 这类不算是IO体系中的子类。 而是直接继承Object 但是它是IO包中的成员,因为它具备读和写的功能。 能完成读写的原理是内部封装了字节输入流和输出流。 而且内部还封装了一个数组,通过指针对数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:RandomAccessFile(随即读取)操作文件有4种模式:"r"、"rw"、"rws" 或 "rwd"
举报原因:
原因补充:

(最多只允许输入30个字)