我有一个文件,我试图二进制编辑来切断标题。在java中的二进制编辑
我已经确定的实际数据我想保留在文件中的起始地址,但我想找到Java中的方式,我可以指定一个范围的字节从文件中删除。
目前我正在读取(Buffered)FileInputStream中的文件,并且我可以看到切断此文件头的唯一方法是从我的起始地址保存到内存中文件的末尾,然后写出来覆盖原始文件。
有什么功能来删除文件位,而不需要经过创建一个全新的文件的过程?
我有一个文件,我试图二进制编辑来切断标题。在java中的二进制编辑
我已经确定的实际数据我想保留在文件中的起始地址,但我想找到Java中的方式,我可以指定一个范围的字节从文件中删除。
目前我正在读取(Buffered)FileInputStream中的文件,并且我可以看到切断此文件头的唯一方法是从我的起始地址保存到内存中文件的末尾,然后写出来覆盖原始文件。
有什么功能来删除文件位,而不需要经过创建一个全新的文件的过程?
试试这个,它使用的RandomAccessFile全歼文件的未需要的部分,首先谋求开始索引,然后开始擦联合国需要的字符。
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
public class Main {
public static void main(String[] args) {
int startIndex = 21;
int numberOfCharsToRemove = 20;
// Using a RandomAccessFile, overwirte the part you want to wipe
// out using the NUL character
try (RandomAccessFile raf = new RandomAccessFile(new File("/Users/waleedmadanat/Desktop/sample.txt"), "rw")) {
raf.seek(startIndex);
for (int i = 1; i <= numberOfCharsToRemove; i++) {
raf.write('\u0000');
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
我找不到任何API方法来执行我想要的东西(云上面的答案)
我解决了它的只是重新写回文件出来一个新的文件,然后替换旧的与新的一个。
我用下面的代码进行替换:
FileOutputStream fout = new FileOutputStream(inFile.getAbsolutePath() + ".tmp");
FileChannel chanOut = fout.getChannel();
FileChannel chanIn = fin.getChannel();
chanIn.transferTo(pos, chanIn.size(), chanOut);
若pos是开始文件传输,直接,我切了这个文件的标题下出现我的起始地址。
我一直在使用这种方法
如果你是在Unix或Linux,你可以用'尾-c + NNN'其中_NNN_是文件中开始复制的偏移量(即跳过也注意到没有放缓字节0至NNN-1 – 2013-02-25 07:25:18
我不这么认为,AFAIK甚至不可能在底层的OS API中使用,你可以使用RandomAccessFile来覆盖文件的开头,但这可能比它更值钱。只要将它写入到一个新文件。 – starblue 2013-02-25 07:45:36
这是一个程序我建立这样的Unix命令不会太顺利。我有一个看的RandomAccessFile以及FileChannel,SeekableByteChannel但他们似乎都难以截断的功能文件到一个给定的大小,这是关于你尽可能去 – Antix 2013-02-25 08:23:25