2017-02-20 17 views
1

В настоящее время я работаю над проектом, и мы разделили его на модули, в одном из них у нас есть файл (. exe). Я решил открыть его в двоичном формате и прочитать его содержимое, изменить их. Но я не должен изменять изменения и сохранять их в одном файле. Когда я пытаюсь это сделать, он говорит 0KB. Он отлично работает при использовании двух файлов.Как прочитать бинарный файл, изменить тот же файл и сохранить файл с изменениями? (JAVA)

Вот исходный код:

 
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();

Заранее спасибо :)

+1

Check [java.io.RandomAccessFile] (http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html ? is-external = true) – Robert

+0

Arg, я забыл о файле произвольного доступа. Наверное, ты получил свой ответ. – GhostCat

+0

@Robert, я посмотрю, спасибо –

ответ

0

Использование RandomAccessFile или Вы также можете создать новый файл с изменениями, сохранить его и удалить оригинал. После удаления исходного файла переименуйте этот новый файл в исходный.

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();