`
samttsch
  • 浏览: 63795 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

RandomAccessFile方法使用测试

阅读更多
public class Test {
	public static void main(String[] args) throws IOException, InterruptedException {
	    test1();
//	    test2();
	    test3();
	}
	
	private static void test1() throws IOException{
	    
	    String filePath = "F:/shanch/temp/a.txt";
	    
	    //RandomAccessFile没有会自动创建文件
	    RandomAccessFile raFile = new RandomAccessFile(filePath,"rw");
	    System.out.println(raFile.getFilePointer());
	    
	    //setLength会往文件里面写入空白串 即byte 00
	    raFile.setLength(36);
	    
	    raFile.writeBytes("0123456789abcdefghijklmnopqrstuvwxyz1111");
	    
	    System.out.println(raFile.getFilePointer());
	    
	    //会将多出的1111截掉
	    raFile.setLength(36);
	    System.out.println(raFile.getFilePointer());
	    
	    raFile.seek(20);
	    System.out.println(raFile.getFilePointer());
	    
	    raFile.skipBytes(6);
	    System.out.println(raFile.getFilePointer());
	    
	    //skipbytes不会使指针将超过文件长度
	    raFile.skipBytes(20);
        System.out.println(raFile.getFilePointer());
	    
        //seek如果位置超过文件长度,会将文件扩大
        raFile.seek(50);
        System.out.println(raFile.getFilePointer());
        raFile.write(100);
        
        raFile.setLength(36);
        
	}
	
	private static void test2() throws IOException{
	    
	    String filePath = "F:/shanch/temp/a.txt";
        RandomAccessFile raFile = new RandomAccessFile(filePath,"rw");
        
        raFile.seek(10);
        //read读取当前指针的byte 读取之后指针下移一个byte
        System.out.println((char)raFile.read());
        System.out.println(raFile.getFilePointer());
        
        raFile.seek(10);
        raFile.write(0);//替换a 而非插入
        raFile.write(0);//替换b
        raFile.write(0);//替换c
	}
	
	private static void test3() throws IOException, InterruptedException{
	 
	    final String filePath = "F:/shanch/temp/a.txt";
        RandomAccessFile raFile = new RandomAccessFile(filePath,"rw");
        FileChannel fChannel = raFile.getChannel();

        //当文件锁住时,不可修改
//        fChannel.lock();
        //程序退出时会自动释放锁
        
        //position与FilePointer一致
        fChannel.position(10);
        System.out.println(raFile.getFilePointer());
        raFile.seek(20);
        System.out.println(fChannel.position());
        
        //清空文件,从文件头开始,只保留指定字节数 
        fChannel.truncate(50);
        
        fChannel.lock(10, 10, true);
        //FileChannel与RandomAccessFile的写方法是不同的实现
        //FileChannel锁住时,RandomAccessFile将不能写
//        raFile.seek(15); 
//        raFile.write(97); //此处会报异常
        
        Thread.currentThread().sleep(2000);
        new Thread() {
            public void run(){
                try
                {
                    RandomAccessFile raFile = new RandomAccessFile(filePath,"rw");
                    raFile.seek(15);
                    System.out.println((char)raFile.read());
                    raFile.write(26);//另一个程序已锁定文件的一部分,进程无法访问。
//                    raFile.read();
                }
                catch (IOException e1)
                {
                    e1.printStackTrace();
                }
            }
        }.start();
        
	}
}
分享到:
评论

相关推荐

    了解Java:RandomAccess

    通常,测试类会包含一系列的测试方法,模拟不同的使用场景,确保RandomAccessFile在各种条件下都能正常工作。这些测试可能包括打开和关闭文件、在文件的不同位置读写数据、检查偏移量的正确性,以及异常处理等。 ...

    java测试试卷(六) (2).pdf

    4. **线程优先级**:Java线程的优先级可以使用`setPriority`方法来调整,以影响线程调度。更高的优先级意味着线程更有可能被CPU选中执行,但不保证绝对优先。 5. **线程操作**:`resume`方法用于恢复被`suspend`...

    使用RandomAccessFie分段写大文件,创建多线程程席、通讨多线程分段读取大文件并分段写入到新文件

    3. **读取操作**:在`run()`方法内,使用`RandomAccessFile`的`seek()`方法移动指针到起始位置,然后使用`read()`或`readFully()`方法读取数据到缓冲区。 4. **写入操作**:读取到的数据写入到新文件,同样使用`...

    java测试试卷六.pdf

    4. **线程优先级**:使用`setPriority`方法可以改变线程的优先级,这影响线程调度,但并不保证绝对的执行顺序。 5. **处理器分配**:线程通过`yield`方法可以让出当前CPU执行权,让具有相同优先级的其他线程有机会...

    java测试试卷六.docx

    Java 语言基础内部测试题涉及了多个 Java 编程的核心概念,主要集中在多线程、字符串操作、输入输出以及文件处理等方面。以下是根据题目内容详细解释的知识点: 1. **垃圾收集**:Java 语言中的垃圾收集器是自动...

    java基础测试题及答案.doc

    10. 字符串操作:在 Java 中,可以使用 indexOf() 方法或 charAt() 方法来查找字符串中的某个字符。因此,选项 C、s.indexOf('V'); 是正确的。 11. 随机访问文件:在 Java 中,RandomAccessFile 类提供了随机访问...

    java测试试卷(六).doc

    Java语言基础内部测试题主要考察了Java编程语言的基础概念,包括线程管理、异常处理、输入输出、字符串操作以及文件处理。以下是对这些知识点的详细解释: 1. **垃圾收集**:Java语言中的垃圾收集(Garbage ...

    java文本读取方法

    - **`RandomAccessFile#seek(long pos)`方法:**用于定位到文件中的特定位置。 - **`RandomAccessFile#readChar()`方法:**用于从当前位置读取一个字符。 ### 总结 本文介绍了Java中常用的四种文本文件读取方法:...

    java测试试卷(六) (2).docx

    `resume()`方法用于恢复被`suspend()`方法停止的线程执行,而`stop()`和`wait()`方法已不推荐使用,因为它们可能引起不可预测的行为或资源泄露。 5. **输入输出流**:`BufferedReader`用于从输入流中读取字符数据,...

    java基础和高级测试题.docx

    5. **抽象方法**:Java中,声明一个抽象方法使用`abstract`关键字,并且方法后面不加具体实现(即没有大括号 `{}`)。正确声明为`public abstract void method();` 6. **Java类的声明**:A和B是正确的声明,C选项...

    Java复习题(三)阅读程序题-软件.doc

    该程序使用 `RandomAccessFile` 将数组 `data_arr` 的元素写入到文件 "temp.dat" 中,然后使用 `seek` 方法将文件指针移动到对应的位置,并将对应的元素读取出来。最后,将读取的结果打印出来。 程序阅读题4 该...

    java基础测试题及答案.docx

    这份测试题涵盖了Java的基础知识,包括标识符、数组初始化、面向对象概念、运算符、抽象方法、类的定义和使用、布局管理器、GUI组件、字符串操作、文件访问以及Socket编程等方面。 1. **标识符**:在Java中,正确的...

    android多线程下载[归纳].pdf

    而第二种方法,即本文采用的方法,是利用`RandomAccessFile`类,它可以对文件进行随机读写,从而在下载过程中直接将数据写入文件的特定位置,避免了后期合并文件的步骤,虽然这种方法的存取速度相对较慢,但简化了...

    【精美排版】java测试考试(六).doc

    Java语言基础测试题主要考察了Java编程中的线程管理、对象同步、输入输出处理以及字符串操作等核心概念。下面是对这些知识点的详细说明: 1. 垃圾收集(Garbage Collection):Java语言的一个重要特性是自动内存...

    java基础和高级测试题.pdf

    5. 抽象方法声明:抽象方法的声明需要使用abstract关键字,返回类型紧跟在方法名之后,不包含方法体。正确的方式是B "public abstract void method();" 6. Java类的理解:选项C "类一定要声明为 public 的,才可以...

    Java+Access实现简易通讯录

    4. **Java编程**:使用Java进行后端开发,编写类和方法来实现通讯录的各种功能。例如,可以有一个`Contact`类表示联系人实体,包含对应的属性和方法。 5. **CRUD操作**: - **Create(创建)**:使用...

    Java测试题2答案

    《Java测试题2》 <br>一、 选择 1.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的 ? B A ArrayList myList=new Object(); B List myList=new ArrayList(); C ...

    2021计算机二级测试Java试题.docx

    24. System类中的属性和方法都是静态的,直接调用System类即可使用。 25. String类的length()方法返回字符串字符个数。 26. Random类位于java.util.random包中,用于生成随机数。 27. Math类中的PI和E分别代表圆周率...

Global site tag (gtag.js) - Google Analytics