广州北大青鸟计算机职业培训学校
互联网技术培训、软件技术培训、大数据培训、云计算培训、数据分析培训信息网
当前位置:网站首页 > 软件教程 > Java技术 > 正文

惠州如何随机访问Java文件?_北大青鸟IT学校

作者:邓华发布时间:2021-04-14分类:Java技术浏览:793


导读:如何随机访问Java文件?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

如何随机访问Java文件?最近惠州北大青鸟很多学员都在问这个问题,那么下面惠州北大青鸟学术部老师给大家解答一下这个问题。

SeekableByteChannel对象提供对文件的随机访问。

我们可以使用Files类的newByteChannel()方法为Path获取一个SeekableByteChannel对象,如下所示:

Path  src = Paths.get("test.txt");
SeekableByteChannel seekableChannel  = Files.newByteChannel(src, READ,  WRITE,  CREATE,  TRUNCATE_EXISTING);

我们可以使用size()方法以字节为单位获取SeekableByteChannel实体的大小。

由于数据被截断或写入通道,因此更新了大小。

import static java.nio.file.StandardOpenOption.CREATE;import static java.nio.file.StandardOpenOption.READ;import static java.nio.file.StandardOpenOption.TRUNCATE_EXISTING;import static java.nio.file.StandardOpenOption.WRITE;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.SeekableByteChannel;import java.nio.charset.Charset;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;public class Main {  public static void main(String[] args) {
   Path src = Paths.get("test.txt");
   String encoding = System.getProperty("file.encoding");
   Charset cs = Charset.forName(encoding);    try (SeekableByteChannel seekableChannel = Files.newByteChannel(src, READ,
       WRITE, CREATE, TRUNCATE_EXISTING)) {
     printDetails(seekableChannel, "Before writing data");
     writeData(seekableChannel, cs);
     printDetails(seekableChannel, "After writing data");

     seekableChannel.position(0);
     printDetails(seekableChannel, "After resetting position to 0");
     readData(seekableChannel, cs);
     printDetails(seekableChannel, "After reading data");
   } catch (IOException e) {
     e.printStackTrace();
   }
 }  public static void writeData(SeekableByteChannel seekableChannel, Charset cs)      throws IOException {
   String separator = System.getProperty("line.separator");
   StringBuilder sb = new StringBuilder();
   sb.append("test");
   sb.append(separator);
   sb.append("test2");
   sb.append(separator);

   CharBuffer charBuffer = CharBuffer.wrap(sb);
   ByteBuffer byteBuffer = cs.encode(charBuffer);
   seekableChannel.write(byteBuffer);
 }  public static void readData(SeekableByteChannel seekableChannel, Charset cs)      throws IOException {
   ByteBuffer byteBuffer = ByteBuffer.allocate(128);
   String encoding = System.getProperty("file.encoding");    while (seekableChannel.read(byteBuffer) > 0) {
     byteBuffer.rewind();
     CharBuffer charBuffer = cs.decode(byteBuffer);
     System.out.print(charBuffer);
     byteBuffer.flip();
   }
 }  public static void printDetails(SeekableByteChannel seekableChannel,
     String msg) {    try {
     System.out.println(msg + ": Size   = " + seekableChannel.size()
         + ", Position = " + seekableChannel.position());
   } catch (IOException e) {
     e.printStackTrace();
   }
 }
}

上面的代码生成以下结果。

Java随机文件访问.png

想了解更多关于Java的资讯,可以来惠州北大青鸟新方舟校区了解一下。

标签:惠州计算机JAVA软件开发惠州计算机Java软件开发惠州计算机JAVA培训惠州计算机JAVA软件开发学校惠州计算机Java软件开发培训JAVAJava软件开发北大青鸟IT计算机学校北大青鸟IT软件学校北大青鸟IT学校


Java技术排行
标签列表
网站分类
文章归档
最近发表