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();
}
}
分享到:
相关推荐
通常,测试类会包含一系列的测试方法,模拟不同的使用场景,确保RandomAccessFile在各种条件下都能正常工作。这些测试可能包括打开和关闭文件、在文件的不同位置读写数据、检查偏移量的正确性,以及异常处理等。 ...
4. **线程优先级**:Java线程的优先级可以使用`setPriority`方法来调整,以影响线程调度。更高的优先级意味着线程更有可能被CPU选中执行,但不保证绝对优先。 5. **线程操作**:`resume`方法用于恢复被`suspend`...
3. **读取操作**:在`run()`方法内,使用`RandomAccessFile`的`seek()`方法移动指针到起始位置,然后使用`read()`或`readFully()`方法读取数据到缓冲区。 4. **写入操作**:读取到的数据写入到新文件,同样使用`...
4. **线程优先级**:使用`setPriority`方法可以改变线程的优先级,这影响线程调度,但并不保证绝对的执行顺序。 5. **处理器分配**:线程通过`yield`方法可以让出当前CPU执行权,让具有相同优先级的其他线程有机会...
Java 语言基础内部测试题涉及了多个 Java 编程的核心概念,主要集中在多线程、字符串操作、输入输出以及文件处理等方面。以下是根据题目内容详细解释的知识点: 1. **垃圾收集**:Java 语言中的垃圾收集器是自动...
10. 字符串操作:在 Java 中,可以使用 indexOf() 方法或 charAt() 方法来查找字符串中的某个字符。因此,选项 C、s.indexOf('V'); 是正确的。 11. 随机访问文件:在 Java 中,RandomAccessFile 类提供了随机访问...
Java语言基础内部测试题主要考察了Java编程语言的基础概念,包括线程管理、异常处理、输入输出、字符串操作以及文件处理。以下是对这些知识点的详细解释: 1. **垃圾收集**:Java语言中的垃圾收集(Garbage ...
- **`RandomAccessFile#seek(long pos)`方法:**用于定位到文件中的特定位置。 - **`RandomAccessFile#readChar()`方法:**用于从当前位置读取一个字符。 ### 总结 本文介绍了Java中常用的四种文本文件读取方法:...
`resume()`方法用于恢复被`suspend()`方法停止的线程执行,而`stop()`和`wait()`方法已不推荐使用,因为它们可能引起不可预测的行为或资源泄露。 5. **输入输出流**:`BufferedReader`用于从输入流中读取字符数据,...
5. **抽象方法**:Java中,声明一个抽象方法使用`abstract`关键字,并且方法后面不加具体实现(即没有大括号 `{}`)。正确声明为`public abstract void method();` 6. **Java类的声明**:A和B是正确的声明,C选项...
该程序使用 `RandomAccessFile` 将数组 `data_arr` 的元素写入到文件 "temp.dat" 中,然后使用 `seek` 方法将文件指针移动到对应的位置,并将对应的元素读取出来。最后,将读取的结果打印出来。 程序阅读题4 该...
这份测试题涵盖了Java的基础知识,包括标识符、数组初始化、面向对象概念、运算符、抽象方法、类的定义和使用、布局管理器、GUI组件、字符串操作、文件访问以及Socket编程等方面。 1. **标识符**:在Java中,正确的...
而第二种方法,即本文采用的方法,是利用`RandomAccessFile`类,它可以对文件进行随机读写,从而在下载过程中直接将数据写入文件的特定位置,避免了后期合并文件的步骤,虽然这种方法的存取速度相对较慢,但简化了...
Java语言基础测试题主要考察了Java编程中的线程管理、对象同步、输入输出处理以及字符串操作等核心概念。下面是对这些知识点的详细说明: 1. 垃圾收集(Garbage Collection):Java语言的一个重要特性是自动内存...
5. 抽象方法声明:抽象方法的声明需要使用abstract关键字,返回类型紧跟在方法名之后,不包含方法体。正确的方式是B "public abstract void method();" 6. Java类的理解:选项C "类一定要声明为 public 的,才可以...
4. **Java编程**:使用Java进行后端开发,编写类和方法来实现通讯录的各种功能。例如,可以有一个`Contact`类表示联系人实体,包含对应的属性和方法。 5. **CRUD操作**: - **Create(创建)**:使用...
《Java测试题2》 <br>一、 选择 1.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的 ? B A ArrayList myList=new Object(); B List myList=new ArrayList(); C ...
24. System类中的属性和方法都是静态的,直接调用System类即可使用。 25. String类的length()方法返回字符串字符个数。 26. Random类位于java.util.random包中,用于生成随机数。 27. Math类中的PI和E分别代表圆周率...