Einlesen einer URL per Konsole

Status
Nicht offen für weitere Antworten.
Hallo,

ich habe ein kleines Programm für die UNI geschrieben, dass eine URL-Adresse von der Konsole einliest und den HTML-Code wieder eingibt. Nun lautet die Aufgabe, man solle sich mit Fehlern der Eingabe auseinandersetzen. Durch ausprobieren mit meinem Programm merkte ich, dass man ein "http://" eingeben muss. Ist es deshalb möglich zu schauen, ob die Adresse gefunden werden kann und falls nicht einfach ein "http://" am Anfang der Adresse einfügt?

Mir sind sonst weiter keine großartigen Fehleingaben eines Benutzers aufgefallen, fallen euch vielleicht noch welche ein?
Danke schon mal.


Code:
import java.net.URL;
import java.io.*;

public class EinlesenURL {
	
	public static void main(String[] args) throws Exception {
		
		String adresse = getEingabe();
		
		URL url = new URL(adresse);

		BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
		String inputLine;
		
		while ((inputLine = in.readLine()) != null) {
			
			System.out.println(inputLine);
			
			}
		
		in.close();
	
	}

	
	  private static String getEingabe(){
		  
		    String eingabe;
		    BufferedReader reader;
		    
		    reader = new BufferedReader( new InputStreamReader( System.in ) );
		    try {
		      eingabe = reader.readLine();
		      return eingabe;
		    } 
		    catch ( IOException e ) { e.printStackTrace(); }
		    
		    return null;
		  }

	
}
 
B

Beni

Gast
Ja, das ist möglich. Wenn du ein String hast, kannst du ihn mit einem "http" ergänzen:

Code:
String eingabe = ...
String httpEingabe = "http://" + eingabe;

Dein Code, der die URL versucht zu laden, schreibst du am einfachsten in eine eigene Methode. Dann kannst du diese Methode mit den verschiedenen Varianten der Eingabe aufrufen (die Methode sollte ein Argument "String eingabe" haben).
 

Murray

Top Contributor
Code:
String httpPrefix = "http://";
if ( eingabe.indexOf( httpPrefix) != 0) eingabe = httpPrefix + eingabe;
 
G

Guest

Gast
Hallo Franziska,

der Konstruktor von URL wirft eine Excepction (MalformedURLException), wenn die eingegeben Adresse nicht ordentlich ist, das könntest Du doch in eine try catch Block auswerten:

Code:
try {
      URL adrese = new URL(args[0]);
} catch (MalformedURLException e) {
	System.out.println("Ihre Eingabe war falsch, Fehler: " e.getMessage());
}

Grüße Momolin
 
Vielen Dank für eure ganzen Antworten.
Ich habe mich zunächst für einen try-catch-Block entschieden um das "http://" anzubinden. Das ganze sieht nun so aus:

Code:
package ppp2.tsj;

import java.net.URL;
import java.io.*;

public class EinlesenURL {
	
	public static void main(String[] args) throws Exception {
		
		String adresse = getEingabe();
		try {
			getURL(adresse);
		}
		catch (Exception e) {
			String urladresse = "http://" + adresse;
			getURL(urladresse);
		}

	}
	
	public static void getURL(String adresse) throws URLException, Exception{
		
		URL url = new URL(adresse);
		
		BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
		String inputLine;
		
		while ((inputLine = in.readLine()) != null) {
			
			System.out.println(inputLine);
			
			}
		
		in.close();
		
	}
	
	
	public static String getEingabe(){
		
		String eingabe;
		BufferedReader reader;
		    
		reader = new BufferedReader( new InputStreamReader( System.in ) );
		try {
			eingabe = reader.readLine();
			return eingabe;
		}
		
		catch ( IOException e ) {
			e.printStackTrace(); 
		}
		
		return null;
	}

	
}


Nun ist das Problem das ich gerne mehrere Catch-Blöcke benutzen will, dieses von Eclipse aber abgeblockt wird, wie kann ich nun einen zweiten Catch-Block erstellen, der an die eingegebene Adresse, ein ".de" oder ".com" einfügt???
 

byte

Top Contributor
Code:
try {
  ...
} catch(...) {
  ...
} catch(...) {
  ...
}


Der obige Code ist aber recht unsauber. Es kann durchaus eine Exception kommen, obwohl das http:// vorhanden ist. Du musst schon explizit prüfen, ob das http:// fehlt und es nur dann einfügen.
 
Danke. Habe ich auch getan. Aber was kommt genau in die Klammer hinter dem catch(...) wenn ich da beides mal (Exception e) schreibe geht das nicht.
 

jank

Aktives Mitglied
Ich denke, du solltest das Konzept nochmal überdenken.

Zunächst einmal funktioniert try-catch so, dass du einen try block hast, in dem etwas "versucht wird auszuführen" und dann kannst du nacheinander verschiedene Exceptions fangen. Natürlich nicht 2x diesselbe.

Generell halte ich das fangen von MalformedURLException bei deinem Problem nicht für sinnvoll, denn die wird ja auch geworfen, wenn ungültige Zeichen in der URL vorkommen etc.etc. Bei fehlender TLD (.de, .com) sollte sie eigentlich NICHT geworfen werden.

Ich würde einfach per Hand mit den Stringfunktionen (wie oben gezeigt) vorne und hinten prüfen, ob das da ist, was du erwartest.

Edit:
Nach allen Bearbeitungen deinerseits kannst du natürlich immer noch versuchen, ein URL Objekt aus dem String zu machen und die Exception zu fangen. Damit prüfst du endgültig, ob es eine gültige URL ist.
 
B

Beni

Gast
Du kannst logische Ausdrücke mit "&&" verUNDen, oder mit "||" verODERn.

Code:
int x = 12;
if( x > 3 && x < 13 ){
  ...
}
 

byte

Top Contributor
Und: if(bedingung1 && bedinung2)
Oder: if(bedingung3 || bedingung4)

... solch Basiswissen solltest Du Dir aber fürs erste in einem (beliebigen) Grundlagenbuch anlesen.
 

jank

Aktives Mitglied
Nicht böse gemeint, aber wie byto schon sagte: Bitte erstmal Grundlagen in einem Buch anlesen (oder notfalls Internettutorial, das würd ich aber nicht empfehlen).

Korrekt wäre für deinen Fall wohl:

Code:
if ( adresse.indexOf(httpSuffix_DE) != 0   &&   adresse.indexOf(httpSuffix_COM) != 0 )
 
Code:
import java.net.URL;
import java.io.*;

public class EinlesenURL {
   
   public static void main(String[] args) throws Exception, URLException {
      
      String adresse = getEingabe();
     
      String httpPreffix    = "http://";
      String httpSuffix_DE  = ".de";
      String httpSuffix_COM = ".com";
      
      
      if (adresse.indexOf(httpPreffix) != 0) {
    	  adresse = httpPreffix + adresse;
    	  try {
    		  getURL(adresse);
    	  }
    	  catch (Exception e) {
    		  if((adresse.indexOf(httpSuffix_DE)) != 0 && (adresse.indexOf(httpSuffix_COM)) != 0) {

    	    	  try  {
    	    		  String urladresse = adresse + httpSuffix_DE;
    	    		  getURL(urladresse);
    	    	  }
    	    	 catch (Exception e1) {
    	    		 String urladresse = adresse + httpSuffix_COM;
    	    		 getURL(urladresse);
    	    	 }
    	    	 }
    		  }
    	  }
      }
   
   public static void getURL(String adresse) throws URLException, Exception{
      
      URL url = new URL(adresse);
      
      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
      String inputLine;
      
      while ((inputLine = in.readLine()) != null) {
         
         System.out.println(inputLine);
         
         }
      
      in.close();
      
   }
   
   
   public static String getEingabe(){
      
      String eingabe;
      BufferedReader reader;
         
      reader = new BufferedReader( new InputStreamReader( System.in ) );
      try {
         eingabe = reader.readLine();
         return eingabe;
      }
      
      catch ( IOException e ) {
         e.printStackTrace();
      }
      
      return null;
   }

   
}

So sieht mein Programm nun aus. Nun wollte ich noch ein weiteren Catch-Block erstellen, falls keine der Möglichkeiten funktioniert hat. Dann soll die Adresse noch einmal abgefragt werden. Doch leider weiß ich nicht, wie ich das Exakt machen kann.
Kann mir vielleicht einer helfen???
 

jank

Aktives Mitglied
Wie schonmal von mir gesagt wird das try-catch Gerüst nicht das tun, was du von ihm willst. Ein fehlendes .de oder .com wird keine Exception werfen (bedenke z.B. die gültige url http://localhost). Arbeite mit if-Abfragen und erst um Schluss könntest du die Exception dann abfangen, wenn du ein mal dein getURL aufrufst.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Methoden Einlesen einer unbegrenzten Matrix über Konsole Java Basics - Anfänger-Themen 6
Saiko Zeilen einer Datei einlesen Java Basics - Anfänger-Themen 3
O zufälliges Wort aus einer Datei einlesen Java Basics - Anfänger-Themen 32
I Nur auf Abfrage von einer Text Datei einlesen Java Basics - Anfänger-Themen 11
E Einteilung der Räume mit einlesen einer .txt datei Java Basics - Anfänger-Themen 16
A Datentypen Unterschiedliche Datentypen in einer Eingabe einlesen Java Basics - Anfänger-Themen 2
MaximilianTM Input/Output Einlesen und bearbeiten einer text Datei / Zeile Java Basics - Anfänger-Themen 5
M Einlesen von Integerwertern aus einer CSV Java Basics - Anfänger-Themen 8
P Methoden ausgelesene (CSV-) Daten in Liste einer anderen Klasse einlesen Java Basics - Anfänger-Themen 0
N gerichteter Graph aus einer Datei einlesen Java Basics - Anfänger-Themen 21
J Encoding Problem beim Einlesen einer txt Datei mit Umlauten Java Basics - Anfänger-Themen 3
D Einlesen funktioniert an einer Stelle nicht und ich kann mir nicht erklären warum Java Basics - Anfänger-Themen 6
S Programm zum Einlesen einer Zahl und Ausgabe der Wurzel Java Basics - Anfänger-Themen 13
B Probleme beim einlesen einer short variablen für einen Array Java Basics - Anfänger-Themen 1
K Einlesen einer txt von BufferedReader klappt nicht wie gewünscht Java Basics - Anfänger-Themen 12
S Input/Output einlesen aus einer evtl. leeren Datei Java Basics - Anfänger-Themen 5
O Einlesen einer Matrix von der Console Java Basics - Anfänger-Themen 18
A CSV Zeilenweise einlesen und in einer HashMap speichern Java Basics - Anfänger-Themen 12
J Variablen Problem beim einlesen einer Zahl Java Basics - Anfänger-Themen 7
T csv einlesen, nutzen einer direkten speicherort eingabe Java Basics - Anfänger-Themen 2
C Spalte einer Textdatei einlesen Java Basics - Anfänger-Themen 10
M Methoden Daten aus einer SQL-Abfrage in eine mehrdimensionales Array einlesen Java Basics - Anfänger-Themen 7
L Problem beim Einlesen einer Datei in einen String Java Basics - Anfänger-Themen 12
O Einlesen einer "config.ini" funktioniert plötzlich nicht mehr ! Java Basics - Anfänger-Themen 10
J byteweise Einlesen einer Datei "Von.. bis.." Java Basics - Anfänger-Themen 3
J Einlesen/Speichern von Strings aus einer Datei Java Basics - Anfänger-Themen 15
H Einlesen einer CSV-Datei Java Basics - Anfänger-Themen 2
S Einlesen einer Datei? Java Basics - Anfänger-Themen 9
H Datei einlesen in einer MVC Anwendung Java Basics - Anfänger-Themen 3
E Einlesen einer int und speichern in einem Array Java Basics - Anfänger-Themen 7
B einlesen einer variable im laufenden programm Java Basics - Anfänger-Themen 5
R JSP: Ausgabe einer entfernten Webseite in Variable einlesen Java Basics - Anfänger-Themen 2
H Problem beim Einlesen einer Datei (Endlosschleife ?) Java Basics - Anfänger-Themen 3
T Problem beim Einlesen einer Datei Java Basics - Anfänger-Themen 3
B Problem beim einlesen einer Textdatei Java Basics - Anfänger-Themen 3
V Quelltext einer Homepage einlesen Java Basics - Anfänger-Themen 12
S Einlesen des Datums in einer Zeile. Java Basics - Anfänger-Themen 16
S Einlesen einer Datei und ins Array speichern Java Basics - Anfänger-Themen 11
G Inhalt einer Textdatei in ein Array einlesen Java Basics - Anfänger-Themen 2
M Einlesen einer CSV-Datei Java Basics - Anfänger-Themen 3
D Probleme mit dem Einlesen einer Datei Java Basics - Anfänger-Themen 11
T Daten aus einer .csv Datei in einen Vector einlesen Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
T Text einlesen code was kommt dahin? Java Basics - Anfänger-Themen 1
S SeriellenPort einlesen Java Basics - Anfänger-Themen 3
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
M Daten aus .txt Datei einlesen und weiterverarbeiten Java Basics - Anfänger-Themen 80
julian0507 Wörter einlesen lassen und rückwärts ausgeben Java Basics - Anfänger-Themen 7
S JSON einlesen und benutzen Java Basics - Anfänger-Themen 5
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
sserio Txt Datei einlesen Java Basics - Anfänger-Themen 9
D Strings aus Excel-Datei einlesen Java Basics - Anfänger-Themen 2
julian112 Input/Output .gz bzw. .txt Datei Einlesen und Umgang mit Exceptions Java Basics - Anfänger-Themen 1
M String beim einlesen formatieren Java Basics - Anfänger-Themen 12
P Datei einlesen, nach Begriff filtern und in Datei ausgeben. Problem Standardausgabe über Konsole Java Basics - Anfänger-Themen 19
G JSP Textfeld einlesen Java Basics - Anfänger-Themen 2
M Einlesen > new Leser Java Basics - Anfänger-Themen 5
W Werte durch Konsole einlesen Java Basics - Anfänger-Themen 10
A Array einlesen und ausgeben Java Basics - Anfänger-Themen 13
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
K Datum einlesen und Tag, Monat und Jahr einzeln ausgeben Java Basics - Anfänger-Themen 1
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
S Wort einlesen Array ausgeben Java Basics - Anfänger-Themen 4
I Java String einlesen und auslesen Java Basics - Anfänger-Themen 11
A Input/Output Mehrere Csv-Dateien einlesen Java Basics - Anfänger-Themen 2
S CSV einlesen und mit Komma trennen Java Basics - Anfänger-Themen 12
CptK Richtigen Pfad beim einlesen von Datei finden Java Basics - Anfänger-Themen 2
I Java-Wort einlesen und ausgeben Java Basics - Anfänger-Themen 7
J Csv-Datei einlesen Java Basics - Anfänger-Themen 52
JD_1998 Arrays einlesen, zwischenspeichern und wieder ausgeben Java Basics - Anfänger-Themen 8
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
L Datein einlesen Java Basics - Anfänger-Themen 1
E Input/Output Datei anhand von Dateinamen einlesen Java Basics - Anfänger-Themen 5
C Datei über relative Pfade einlesen Java Basics - Anfänger-Themen 6
A Input/Output Dateien einlesen und ausgeben Java Basics - Anfänger-Themen 7
A Klasse um daten zu einlesen Java Basics - Anfänger-Themen 26
A 2d Arrays aus txt.file einlesen Java Basics - Anfänger-Themen 16
A Textdatei mit stream einlesen Java Basics - Anfänger-Themen 2
P Datei einlesen und zurückgeben Java Basics - Anfänger-Themen 5
G String wird nach Einlesen aus Datei nicht erkannt Java Basics - Anfänger-Themen 3
M String in Scanner einlesen Java Basics - Anfänger-Themen 6
E TXT FILE EINLESEN Java Basics - Anfänger-Themen 4
M Einzelzeichen einlesen Java Basics - Anfänger-Themen 2
C (char) Array einlesen Java Basics - Anfänger-Themen 8
B HTML File einlesen inkl. Bilder? Java Basics - Anfänger-Themen 2
E Mehrere Eingabezeilen gleichzeitig einlesen Java Basics - Anfänger-Themen 7
B HTML Datei einlesen und HTML Code in String wandeln Java Basics - Anfänger-Themen 19
V Schleife für das Einlesen von Werten für int Variablen, die Bestandteil von Arrays sein sollen Java Basics - Anfänger-Themen 16
P Text Datei einlesen und übertragen Java Basics - Anfänger-Themen 15
P Array einlesen von Konsole Java Basics - Anfänger-Themen 8
D Eingaben in String Array einlesen Java Basics - Anfänger-Themen 12
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
R Compiler-Fehler Einlesen von Konsolenparameter funtioniert nichtmehr Java Basics - Anfänger-Themen 4
I OOP Objektnamen über die Konsole richtig einlesen Java Basics - Anfänger-Themen 9
J Einlesen von Datei funktioniert nicht Java Basics - Anfänger-Themen 8
H Einlesen Java Basics - Anfänger-Themen 8
H Einlesen von Zahlen Java Basics - Anfänger-Themen 20
B mehrere Werte mit scanner und while schleife einlesen, max berechnen bzw addieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen


Oben