/**
* 修改文件中的某一部分的数据测试: 将字定位置的字母改为大写~
* @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;
}