2017-07-14 8 views
1

Ich habe den folgenden Code verwendet, um die Datei OIMV2Migration.sh unter Linux zu bearbeiten.Neue Datei wird nicht bei renameTo() aufgerufen

String oldFileName = "OIMV2Migration.sh";//file to be edited 
    String tmpFileName = "tmp_try.dat"; //new file containing changes 
    BufferedReader br = null; 
    BufferedWriter bw = null; 
        try { 
        br = new BufferedReader(new FileReader(oldFileName)); 
        bw = new BufferedWriter(new FileWriter(tmpFileName)); 
        String line; 
        while ((line = br.readLine()) != null) { 
         if (line.contains("SURBHI")) { 
          line = line.replace("SURBHI MITTAL" , "SURBHI GUPTA");} 
         bw.write(line+"\n"); 
        } 
        } catch (Exception e) { 
        return; 
        } finally { 
        try { 
         if(br != null) 
          br.close(); 
        } catch (IOException e) { 
         // 
        } 
        try { 
         if(bw != null) 
          bw.close(); 
        } catch (IOException e) { 
         // 
        }} 

       //delete the old file 
        File oldFile = new File(oldFileName);; 
        oldFile.delete(); 
       //rename the new file to old file   
        File newFile = new File(tmpFileName); 
        System.out.println(newFile.getAbsolutePath()); 
        Boolean success = newFile.renameTo(oldFile); 
        System.out.println(newFile.getAbsolutePath()); 

Hier wird die Datei korrekt aktualisiert zu werden, aber der absolute Pfad des newFile immer zeigt auf „tmp_try.dat sowohl vor renameTo() und nach renameTo() ausgeführt wird.

I von Stack-Überlauf Link wissen, dass der absolute Pfad der Datei-Instanz nicht ändert, bleibt es gleich Aber mein Problem ist, gibt es eine andere Datei in meinem System idmlcm.sh, die intern OIMV2Migration.sh.But nach dieser Methode aufruft ausgeführt wird, ist idmlcm.sh nicht in der Lage, OIMV2Migration.sh aufzurufen, als ob diese Datei nicht gefunden werden könnte. Die Datei existiert nur im richtigen Verzeichnis.

Antwort

0

Nach JAVA Documentation

Verhalten von renameTo:

Viele Aspekte des Verhaltens dieser Methode sind von Natur aus plattformabhängig: Der Umbenennungsvorgang möglicherweise nicht in der Lage sein, eine Datei bewegen aus ein Dateisystem zu einem anderen, möglicherweise nicht atomaren, und es möglicherweise nicht erfolgreich, wenn eine Datei mit dem Ziel abstrakten Pfadname bereits existiert. Der Rückgabewert sollte immer überprüft werden, um sicherzustellen, dass der Umbenennungsvorgang erfolgreich war.

In Ihrem Fall zuerst sind Sie oldFile zu löschen und als umbenennen, dass tmpFile zu oldFileName, dass tatsächlich funktioniert perfekt, aber wenn Sie newFile.getAbsolutePath() rufen Weg der tmpFile gedruckt werden, weil die Object newFile bezieht sich noch auf alten Pfad nur. Sie müssen die File Object neu erstellen, um auf Ihre umbenannte File zuzugreifen.

+0

Das habe ich verstanden, aber dann, warum mein Skript idmlcm.sh OIMV2Migration.sh nicht aufrufen kann, nachdem dieser Vorgang ausgeführt wird? –

+0

@SurbhiMittal erstellen Sie ein neues Objekt wie dieses - 'newFile = neue Datei (oldFile.getAbsolutePath());' Dies wird ein neues Dateiobjekt der umbenannten Datei erstellen. –

Verwandte Themen