smile_elims

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


/**

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

* @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;

}
posted on 2022-01-26 09:43  smile_elims  阅读(92)  评论(0编辑  收藏  举报