file.getFilePointer()作用是什么
时间: 2024-02-19 11:00:24 浏览: 113
`file.getFilePointer()`是Java RandomAccessFile类中的一个方法,它的作用是获取当前文件指针的位置,也就是文件中下一个读取或写入操作的位置。
在RandomAccessFile中,文件指针的位置可以通过`seek()`方法进行设置。当我们使用`read()`或`write()`方法时,它们会自动向前移动文件指针的位置。因此,我们可以使用`getFilePointer()`方法来获取当前文件指针的位置,以便在需要的时候进行操作。
在读取文件时,我们通常会用一个循环来读取文件的每一行,每读取一行,文件指针的位置就会向后移动。因此,我们可以使用`getFilePointer()`方法来跟踪文件指针的位置,以便在需要的时候进行其他的操作。
相关问题
使用随机访问流读出文本文件最后n个字符,文本文件名和数字n用命令行参数的方式提供。 以下程序是本题的主要代码,按照题目要求运行时命令行指定文本文件名和数字n。例如在命令提示符窗口运行:java shiyan44 text.txt 12 其中文本文件名 text.txt对应args[0], 12对应args[1]。必须加以注意的是这里12为字符串,要求在程序中加以处理转化为数值类型。请根据功能要求将空白处的语句填写完整。 import java.io.* ; public class shiyan43{ public static void main(String args[])throws Exception{ String filename,s,t; int n=0; long leng,filepoint; //注意这里定义为长整型 RandomAccessFile file= ; //创建随机文件读写对象 leng=file.length(); t=args[1]; //以下循环语句完成将从命令行接受到的数字字符转换成为整数类型 for(int i=0;i<t.length();i++){ n=10*n+(int)(t.charAt(i)-48); } file.skipBytes((int)(leng-n)); //将文件指针向前移动到最后n个字符,请注意这里为何要将长整形转换为整型类型 filepoint=file.getFilePointer(); while(filepoint<leng){ s= ; //读出内容并赋值给变量s System.out.println(s); filepoint=file.getFilePointer(); } file.close(); } }
String filename,s,t;
int n=0;
long leng,filepoint;
RandomAccessFile file=null; //需初始化,防止后面关闭对象时抛出异常
filename=args[0];
t=args[1];
for(int i=0;i<t.length();i++){
n=10*n+(int)(t.charAt(i)-48); //将字符转换为整数类型
}
try{
file=new RandomAccessFile(filename,"r"); //创建只读模式的随机访问文件对象
leng=file.length();
file.skipBytes((int)(leng-n)); //将文件指针移动到倒数第n个字符处
filepoint=file.getFilePointer();
while(filepoint<leng){
s=file.readLine(); //逐行读取文件内容
if(s!=null){ //判断读取的内容是否为空行
s=s.trim(); //去除字符串首尾空格
if(!s.equals("")){ //判断字符串是否为空
System.out.println(s); //输出非空字符串
}
}
filepoint=file.getFilePointer();
}
}catch(Exception e){
e.printStackTrace();
}finally{ //关闭文件对象
try{
if(file!=null){
file.close();
}
}catch(Exception e){
e.printStackTrace();
}
}
import java.io.*; public class RandomRWDataDemo { public static void main(String[] args) { try { RandomAccessFile raf = new RandomAccessFile("file2.txt", "rw"); long startoff = raf.getFilePointer(); raf.writeBoolean(true); raf.writeByte(10); raf.writeChar('b'); raf.writeDouble(123.123); raf.writeInt(123); raf.seek(startoff); System.out.println("读取 boolean 的值为" + raf.readBoolean()); System.out.println("读取 byte 的值为" + raf.readByte()); System.out.println("读取 char 的值为" + raf.readChar()); System.out.println("读取 double 的值为" + raf.readDouble()); System.out.println("读取 int 的值为" + raf.readInt()); raf.close(); } catch (Exception e) { } } }请分析这段代码
这段代码演示了使用RandomAccessFile类实现读写数据的过程。
首先,代码创建了一个RandomAccessFile对象raf,它的第一个参数是文件名,第二个参数是打开文件的模式。"rw"表示读写模式,即既可以读取文件,也可以向文件写入内容。
接下来,代码使用writeBoolean、writeByte、writeChar、writeDouble、writeInt等方法向文件写入了不同类型的数据。
然后,代码使用getFilePointer方法获取当前文件指针的位置,也就是文件的开头。再使用seek方法将文件指针移动到开头位置。
接着,代码使用readBoolean、readByte、readChar、readDouble、readInt等方法读取文件中的数据,并输出到控制台上。
最后,代码关闭了RandomAccessFile对象raf。
需要注意的是,如果文件不存在,RandomAccessFile会自动创建一个新文件。如果文件已经存在,那么在写入数据时会覆盖已有的数据。因此,建议在写入数据之前先判断文件是否存在,或者使用追加写入模式("rwd"或"rwa")避免数据覆盖。
阅读全文