2016-04-14 7 views
0

Ich bin ein junger und neuer Entwickler, und ich habe nie mit Java-Servlets gearbeitet. Ich habe eine HTTP-URL, die es mir erlaubt, eine TXT-Datei herunterzuladen (zum Beispiel: http://textfiles.com/100/914bbs.txt)Wie eine TXT-Datei herunterladen und lesen von http URL mit meinem Servlet

Also baute ich ein Java-Servlet inspiriert von dem, was ich in anderen Posts gesehen habe. Mein Ziel ist es, diese .txt-Datei herunterzuladen und zu lesen. Ich möchte diese heruntergeladene Datei in meine "data.txt" legen.

Die ServletDownload Klasse:

public class ServletDownload extends HttpServlet { 
    private static final int BYTES_DOWNLOAD = 1024; 

    public void doGet(HttpServletRequest request, HttpServletResponse response) 
      throws IOException { 
     response.setContentType("text/plain"); 
     response.setHeader("Content-Disposition", 
       "attachment;filename=downloadname.txt"); 
     ServletContext ctx = getServletContext(); 
     InputStream is = ctx.getResourceAsStream("Donnees/data.txt"); 

     int read = 0; 
     byte[] bytes = new byte[BYTES_DOWNLOAD]; 
     OutputStream os = response.getOutputStream(); 

     while ((read = is.read(bytes)) != -1) { 
      os.write(bytes, 0, read); 
     } 
     os.flush(); 
     os.close(); 
    } 
} 

Nun weiß ich nicht, ob mein Code ist gut gemacht und wie es zu benutzen mit meiner URL?

Antwort

-1

Das Ende des Codes könnte so etwas sein (mit der Try-with-Ressourcen Aussage richtig, die Ströme zu schließen):

try (InputStream is = new URL("http://textfiles.com/100/914bbs.txt").openStream(); 
    OutputStream os = response.getOutputStream()) { 

    int read = 0; 
    byte[] bytes = new byte[BYTES_DOWNLOAD]; 

    while ((read = is.read(bytes)) != -1) { 
     os.write(bytes, 0, read); 
    } 
    os.flush(); 
} 
+0

Dank! Eine andere Frage, jetzt habe ich dieses Servlet, wie kann ich die DoGet-Methode in einer anderen Klasse aufrufen? Genau, wie kann ich "Anfrage" und "Antwort" in einer anderen Klasse initialisieren? – Vincent

+0

Warum sollten Sie das tun? –

+0

Wenn Sie in der Lage sein müssen, dasselbe an anderer Stelle zu tun, ziehen Sie in Betracht, den Teil des Codes zu extrahieren, den Sie beispielsweise in einer Dienstprogrammklasse wiederverwenden möchten, und rufen Sie die zugehörige Hilfsmethode aus den verschiedenen Klassen auf. –