2016-03-13 1 views
0
import java.io.*; 
class CopyFile 
{ 
    public static void main(String args[]) 
      throws IOException 
    { 
     int i; 
     FileInputStream fin=null; 
     FileOutputStream fout=null; 

     if(args.length!=2) 
     { 
      System.out.println("Mention the name of Source and Destination File"); 
      return; 
     } 
     try{ 
      fin=new FileInputStream(args[0]); 
      fout=new FileOutputStream(args[1]); 

      do{ 
       i=fin.read(); 
       if(i!=-1) fout.write(i); 

      }while(i!=1); 

     } catch (IOException exc) 
     {System.out.println("I/O Error Exception exc"+exc); 
     } 
     finally { 
      try{ 
       if(fin !=null) fin.close(); 

      }catch (IOException exc){ 
       System.out.println("Error Closing the File");} 

      try { 
       if(fout !=null) fout.close(); 

      }catch (IOException exc) 
      {System.out.println("Error Closing the File"); 
      } 

     } 
    } 
} 

Au-dessus des copies de codage des données à partir du fichier source au fichier de destination. PROBLEME: pourquoi la méthode Close() ne peut-elle pas fermer le fichier ouvert? Je suis un débutant et je souhaite apprendre la programmation. THK EN AVANT !!écriture d'un fichier à l'aide FileOutput flux

+0

Vous ferme FileOutputStream non File ... – amkz

+0

'Close()' est de fermer la ressource, 'FileOutputStream' dans votre cas – Ramanlfc

Répondre

0

Vous avez une boucle infinie ici (un débogueur confirmer)

 do{ 
      i=fin.read(); 
      if(i!=-1) fout.write(i); 

     }while(i!=1); // you are checking for 1 not -1. 

Je vous suggère de changer cela

for (int b; (b = fin.read()) != -1;) 
    fout.write(b); 

ou vous pouvez utiliser un tampon

try (FileInputStream fin=new FileInputStream(args[0]); 
    FileOutputStream fout=new FileOutputStream(args[1])) { 
    byte[] bytes = new byte[8192]; 
    for (int len; (len = fin.read(bytes)) > 0;) 
     fout.write(bytes, 0, len); 
} // try-with-resource will close the files. 
+0

Mis à part la boucle infinie, je pense que OP veut copier le contenu de 'fin' à' fout', pas écrire le résultat int de la lecture du fichier. –

+0

@ cricket_007 Le résultat int de la lecture du fichier est l'octet suivant (à moins qu'il ne soit -1) donc l'écriture va copier le fichier. –

+0

Ah, je vois. Normalement, je fais juste readline, mais byte by byte fonctionne aussi. –