/**

* 修改文件中的某一部分的数据测试: 将字定位置的字母改为大写~

* @param fName要修改的文件名字

* @param offset起始字节

* @param len要修改多少个字节

* @return是否修改成功

* @throws Exception文件读写中可能出的错

* @author javaFound

*/

public static boolean changeFile(String fName, int offset, int len) throws Exception{

// 创建一个随机读写文件对象~

RandomAccessFile raf = new RandomAccessFile(fName, "rw");

long totalLen = raf.length();

System.out.println("文件总长字节是: " + totalLen);

// 打开一个文件通道~

FileChannel channel = raf.getChannel();

// 映射文件中的某一部分数据以读写模式到内存中~

MappedByteBuffer buffer= channel.map(FileChannel.MapMode.READ_WRITE, offset, len);

// 示例修改字节~

for(int i = 0; i < len; ++ i) {

byte src = buffer.get(i);

// 修改 Buffer 中映射的字节的值~

buffer.put(i,(byte)(src-31));

System.out.println("被改为大写的原始字节是:"+src);

}

// 强制输出,在 buffer 中的改动生效到文件~!

buffer.force();

buffer.clear();

channel.close();

raf.close();

return true;

}

public static void changeFileTest() throws Exception {

changeFile1("C:\\Users\\梁\\Desktop\\临时\\1.docx", 3, 5);

System.out.println(" change OK... ");

}
public static boolean changeFile1(String fName, int offset, int len) throws Exception{

// 创建一个随机读写文件对象~

RandomAccessFile raf = new RandomAccessFile(fName, "rw");

long totalLen = raf.length();

System.out.println("文件总长字节是: " + totalLen);

// 打开一个文件通道~

FileChannel channel = raf.getChannel();

// 映射文件中的某一部分数据以读写模式到内存中~

MappedByteBuffer buffer= channel.map(FileChannel.MapMode.READ_WRITE, offset, len);

// 示例修改字节~

for(int i = 0; i < len; ++ i) {

byte src = buffer.get(i);

// 修改 Buffer 中映射的字节的值~

buffer.put(i,(byte)(src+31));

System.out.println("被改为大写的原始字节是:"+src);

}

// 强制输出,在 buffer 中的改动生效到文件~!

buffer.force();

buffer.clear();

channel.close();

raf.close();

return true;

}

相关文章:

  • 2022-02-16
  • 2021-06-10
  • 2022-02-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-06
  • 2021-06-24
  • 2021-07-02
  • 2021-08-22
  • 2021-09-13
  • 2021-07-31
  • 2021-07-26
相关资源
相似解决方案