2016-12-22 3 views
0

Mein else if Block wird das Ergebnis vom Remote-Dienst überprüfen.Neu erstellte Datei kann nicht in Java geöffnet werden

Wenn das Ergebnis übereinstimmt, wird ein weiterer API-Aufruf ausgelöst, um den Remotedienst erneut zu kontaktieren. Der Remote-Dienst sendet eine Datei an mein Client-Programm zurück.

Ich habe alle meinen Code getestet und es funktioniert, aber ich bin nicht in der Lage, die neue Datei zu öffnen, und es zeigt die Datei wurde beschädigt. Mein Client-Programm liest die Datei vom Remote-Dienst und schreibt sie in einen anderen Dateinamen in einem anderen Verzeichnis.

Dies ist mein Quellcode:

else if (result == 1 && value.equals("problem")) 
{ 
    String Url = "http://server_name:port/anything/anything/"; 
    String DURL = Url.concat(iD); 
    System.out.println("URL is : " + DURL); // the remote API URL 
    URL theUrl = new URL (DURL); 
    HttpURLConnection con1 = (HttpURLConnection) theUrl.openConnection(); //API call 
    con1.setRequestMethod("GET"); 
    con1.connect(); 
    int responseCode = con1.getResponseCode(); 
    if(responseCode == 200) 
    { 
     try 
     { 
      InputStream is1 = con1.getInputStream(); 
      BufferedReader read1 = new BufferedReader (new InputStreamReader(is1)); 
      String data1 = "" ; 
      while ((data1 = read1.readLine()) != null) 
      { 
       PrintStream ps = new PrintStream(new FileOutputStream(filePath)); 
       ps.print(data1); 
       ps.close(); 

      } 
      System.out.println("The new sanitized file is ready"); 
     } 
     catch(IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
} 

Das ist mein filePath im Code D erwähnt: /file/red_new.docx. So bekomme ich meinen Dateipfad: String filePath = "D:/file/"+fn+"_new."+fileType;. Die Variable fn ist der Dateiname aus der JSON-Zeichenfolge des ersten API-Aufrufs, während fileType der Dateityp aus der JSON-Zeichenfolge aus dem zweiten API-Aufruf ist. Ich füge in _new hinzu, um anzuzeigen, dass es eine neue Datei ist und Java-Verkettung mit fn und fileType verwendet, um den vollständigen Pfad zu erhalten.

+0

Definieren Sie "nicht in der Lage, die neue Datei zu öffnen", und sagen Sie uns, was "zeigt die Datei wurde beschädigt". Unklar, was du verlangst. Sind diese Textdateien? – EJP

+0

Sie sollten alle offenen Verbindungen/Streams/Leser in einem endgültigen Block oder mehreren endlich Blöcke schließen ... diese neigen dazu, Inkonsistenzen zu beheben und es ist in der Regel gute Praxis, dies zu tun –

Antwort

1

Sie eine neue Ausgabedatei pro Eingabezeile erstellen, so dass Sie immer nur die letzte Zeile bekommen. Und Sie verlieren auch die Leitungsabbrecher. Versuchen Sie Folgendes:

PrintStream ps = new PrintStream(new FileOutputStream(filePath)); 
while ((data1 = read1.readLine()) != null) 
{ 
    ps.println(data1); 
} 
ps.close(); 

Sie schließen auch nicht den Eingabestream. Wenn diese Dateien nicht alle als Textdateien bekannt sind, sollten Sie und OutputStream verwenden.

+0

danke, es ist Arbeit jetzt – attack

0

Verwenden Sie finate block, um die offenen Streams zu schließen. Wenn der Stream nicht geschlossen ist, können Sie ihn erst öffnen, wenn der Prozess, der den Stream enthält, geschlossen oder freigegeben wird.

zB:

try(InputStream is1 = con1.getInputStream()){ 
    // ... 
} 
Verwandte Themen