今天碰到了这个文件操作类。
对于其中的seek方法有点疑惑,后来自己写个小例子,终于明白了。
以下是API文档中的解释 :
seek
public void seek(long pos)
throws IOException
设置到此文件开头测量到的文件指针偏移量,在该位置发生下一个读取或写入操作。偏移量的设置可能会超出文件末尾。偏移量的设置超出文件末尾不会改变文件的长度。只有在偏移量的设置超出文件末尾的情况下对文件进行写入才会更改其长度。
参数:
pos
- 从文件开头以字节为单位测量的偏移量位置,在该位置设置文件指针。
抛出:
IOException
- 如果 pos
小于 0
或者发生 I/O 错误。
说的很是让人迷糊。
下面就一个小例子说明你:
在项目目录下建一个test文件夹,在该文件夹中新建一个aa.txt的文件。在里面写上abcdefghijklmnopqrstuvwsyz
源文件内容如下(Main方法部分):
String basePath=System.getProperty("user.dir");
String fileName="aa.txt";
System.out.println(basePath);
File file=new File(basePath+"/test", fileName);
RandomAccessFile accessor=new RandomAccessFile(file, "rw");
System.out.println("文件长度:"+accessor.length());
accessor.seek(accessor.length());
accessor.writeBytes("[First Add]");
accessor.close();
程序执行结果为:
abcdefghijklmnopqrstuvwsyz[First Add]
现在修改一下程序:
String basePath=System.getProperty("user.dir");
String fileName="aa.txt";
System.out.println(basePath);
File file=new File(basePath+"/test", fileName);
RandomAccessFile accessor=new RandomAccessFile(file, "rw");
System.out.println("文件长度:"+accessor.length());
accessor.seek(3);
accessor.writeBytes("[Second Add]");
accessor.close();
程序运行结果为:
abc[Second Add]pqrstuvwsyz[First Add]
比较两次结果我们可以得出以下的结论:
seek()方法是移动文件操作的指针的,而其参数就是位移量。
我们第一次将位移量设置为整个文件的长度,则指针指向了文件的末尾,我们向文件写入[First Add],则会出现在文件的结尾。
第二次,我们将位移量设置为3,则文件指针指向了第三个字符c的后面,我们向我文件写入[Second Add],则该文字出现在c的后方,同时覆盖掉了其所占位置的原来的字符。
分享到:
相关推荐
2. 随机访问文件:使用 `java.io.RandomAccessFile` 类,可以在文件的任意位置进行读写。 3. 目录管理:`java.io.File` 类提供创建、删除、重命名文件和目录的方法。 4. 文件属性:可以获取文件的大小、创建时间、...
- `java.io.RandomAccessFile`: 可以随机访问文件的流。 - `org.jibble.simpleftp.SimpleFTP`: 提供了简单的FTP客户端功能。 #### 2. SimpleFTP类的使用 ```java SimpleFTP myftp = new SimpleFTP(); // 连接FTP...
import java.io.RandomAccessFile; import java.io.IOException; public class PrependToFile { public static void main(String[] args) { try (RandomAccessFile file = new RandomAccessFile("notes.txt", "rw...
import java.io.RandomAccessFile; // 定义文件路径 try { RandomAccessFile logFile = new RandomAccessFile("指定路径", "rw"); // "rw"表示读写模式 long lg = logFile.length(); // 获取文件长度 logFile....
### Java JDK IO包类详解 #### 概述 Java平台提供的`io`包为开发者提供了访问文件系统、对象序列化等功能的基本输入输出能力。它主要包括字节流、字符流及对象流(字节流的包装类)。此外,还提供了一些基本的文件...
import java.io.RandomAccessFile; public static void randomReadFile(String fileName) { try (RandomAccessFile raf = new RandomAccessFile(fileName, "r")) { long length = raf.length(); for (long i = 0...
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream;...import java.io.RandomAccessFile;
对于需要在文件的任何位置进行读取的情况,可以使用`java.io.RandomAccessFile`类。它可以让你自由地定位到文件的任意位置进行读写操作: ```java RandomAccessFile randomFile = new RandomAccessFile(fileName...
- `java.io.RandomAccessFile`: 提供对文件的随机访问能力,即可以定位到文件中的任意位置进行读写操作。 - `java.io.File`: 表示文件和目录的抽象表示形式。 - `java.io.InputStream`: 所有输入流的超类,用于从源...
- 修改:可以使用`Files.write()`覆盖文件内容,或者`java.io.RandomAccessFile`类进行随机访问和修改。 3. 文件属性:Java提供`java.io.File`类获取文件属性,如大小、创建时间、最后修改时间等。`Files`类提供了...
Java编程语言是软件开发领域的重要工具,尤其在企业级应用中占据着主导地位。本教程聚焦于Java中的`...通过观看"Java基础第16天-01.RandomAccessFile.avi"的视频教程,你将能够更深入地了解和运用这一特性。
- **随机访问文件**:`java.io.RandomAccessFile` 支持在文件任意位置读写,常用于大文件操作。 5. **文件复制和移动** - **复制**:可以使用 `java.nio.file.Files.copy()` 或自定义逻辑实现文件复制,考虑是否...
### Java IO 类层次结构解析 #### 一、概述 Java IO(Input/Output)系统是Java平台中的一个重要组成部分,用于处理程序与外部设备之间的数据交换。Java IO系统提供了丰富的类来支持不同类型的输入输出操作,包括...
import java.io.RandomAccessFile; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.util.NoSuchElementException; import java.util.StringTokenizer; public ...
在Java中,可以使用`java.io`包中的`RandomAccessFile`类来实现。这个类允许我们按字节或字节数组进行读写操作,从而可以精确地定位到文件的任意位置进行写入或读取。以下是一个简单的文件分割示例: ```java ...
Java IO 操作是Java编程中不可或缺的一部分,它涵盖了文件的读写、追加、删除、移动和复制等多种功能。在Java中,IO流(Input/Output Stream)是处理输入输出的主要方式,它允许数据从一个源(如硬盘或网络)传输到...
文件切割和文件合并这个问题困扰了我有一段时间了(超过一天没做粗来)。...import java.io.RandomAccessFile; import java.util.Scanner; public class Main { public static void main(String[] arg
import java.io.RandomAccessFile; import java.nio.charset.StandardCharsets; public class WriteChineseExample { public static void main(String[] args) { try (RandomAccessFile raf = new ...