2016-06-10 9 views
0

Ich habe eine Datei, die ich basierend auf einigen Benutzer Menüauswahl aktualisieren möchte. Mein Code erhält das IFile , wenn es nicht existiert, wurde es erstellt (mit dem Inhalt des Benutzers), und wenn es existiert, sollte es aktualisiert werden. Mein aktueller Code ist:Update IFile Inhalt in Eclipse-Plugin

String userString= "original String"; //This will be set by the user 
    byte[] bytes = userString.getBytes(); 
    InputStream source = new ByteArrayInputStream(bytes); 
    try { 
     if(!file.exists()){ 
      file.create(source, IResource.NONE, null); 
     } 
     else{ 
      InputStream content = file.getContents(); 
      //TODO augment content 
      file.setContents(content, 1, null); 
     } 

    } catch (CoreException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     IDE.openEditor(page, file); 

Mein Problem ist, dass, obwohl ich den ursprünglichen Inhalt erhalten und stellen Sie den Inhalt der Datei, ich bin eine leere Datei auf Update erhalten, das heißt, der gesamte Inhalt gelöscht wird.

Was mache ich falsch?

+1

Dieser Code setzt den Inhalt der Datei nur auf den vorhandenen Inhalt, wenn die Datei bereits existiert. Ich würde jedoch vermuten, dass dies die Datei möglicherweise abschneidet, weil Sie die Datei gleichzeitig lesen und schreiben. Was möchten Sie eigentlich tun, wenn die Datei bereits existiert? –

+0

Hey. Entschuldigung, wenn mein Beitrag nicht klar war, aber ich habe einen // TODO Augment Inhalt Die Idee, dass basierend auf Benutzereingaben, ich den aktuellen Dateiinhalt erhalten + die Benutzereingabe zum vorhandenen vorhandenen Inhalt hinzufügen, und die Datei mit dem neuen festlegen Inhalt. Da ich keine Synchronisierungsprobleme vermeiden möchte, scheint es, dass der beste Weg ist, den Inhalt zu nehmen, zu ändern und neu zu setzen. Aber wenn ich SetContents setze, bekomme ich eine leere Datei – Quantico

+2

Haben Sie 'content.close()' nach dem Ende gelesen? –

Antwort

2

Diese Version des Codes in Ihrem Kommentar funktioniert für mich:

InputStream inputStream = file.getContents(); 

StringWriter writer = new StringWriter(); 

// Copy to string, use the file's encoding 
IOUtils.copy(inputStream, writer, file.getCharset()); 

// Done with input 
inputStream.close(); 

String theString = writer.toString(); 

theString = theString + " added"; 

// Get bytes using the file's encoding 
byte[] bytes = theString.getBytes(file.getCharset()); 

InputStream source = new ByteArrayInputStream(bytes); 

file.setContents(source, IResource.FORCE, null); 

Hinweis der Nähe des ursprünglichen Eingangsstrom und die Verwendung von file.getCharset() die richtige Codierung zu verwenden.

+0

Ich habe die inputStream.close(); – Quantico

Verwandte Themen