我目前正在开发一个项目,我们已将其划分为模块,其中一个模块中,我们有一个文件(.exe)扩展名。我决定以二进制格式打开它并读取它的内容,修改它们。但是,我不是要修改更改并将其保存在同一个文件中。当我试图这样做时,它说0KB。使用两个文件时,它的工作正常。
以下是源代码:
public static void main(String[] args) {
String strSourceFile="E:/e.exe";
String strDestinationFile="E:/f.exe";
try
{
FileInputStream fin = new FileInputStream(strSourceFile);
FileOutputStream fout = new FileOutputStream(strDestinationFile);
byte[] b = new byte[1];
int noOfBytes = 0;
System.out.println("Copying file using streams");
while( (noOfBytes = fin.read(b)) != -1 )
{
fout.write(b, 0, noOfBytes);
}
System.out.println("File copied!");
//close the streams
fin.close();
fout.close();
答案 0 :(得分:0)
使用RandomAccessFile或您也可以创建一个包含更改的新文件并将其保存并删除原始文件。删除原始文件后,将此新文件重命名为原始文件。
答案 1 :(得分:0)
您正在尝试使用输入和输出流读取和写入相同的文件,以便在尝试使用同一文件执行此操作时不会复制该文件。相反,使用中间文件作为缓冲区,如下面的代码我使用f.exe作为中间缓冲区,接下来我将数据从缓冲区文件再次复制到原始文件jar.exe,最后你需要删除缓冲区文件。
以下是代码:
String strSourceFile = "C:/jar.exe";
String strDestinationFile = "C:/f.exe";
FileInputStream fin = new FileInputStream(strSourceFile);
FileOutputStream fout = new FileOutputStream(strDestinationFile);
byte[] b = new byte[1];
int noOfBytes = 0;
System.out.println("Copying file using streams");
while ((noOfBytes = fin.read(b)) != -1) {
fout.write(b, 0, noOfBytes);
}
fin.close();
fout.close();
String strDestinationFile1 = "C:/jar.exe";
FileInputStream fin1 = new FileInputStream(strDestinationFile);
FileOutputStream fout1 = new FileOutputStream(strDestinationFile1);
while ((noOfBytes = fin1.read(b)) != -1) {
fout1.write(b, 0, noOfBytes);
}
System.out.println("File copied!");
//close the streams
fin1.close();
fout1.close();
File file = new File("C:/f.exe");
file.delete();