BufferedImage etc

  • Themenstarter Themenstarter ichbinsnur
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
I

ichbinsnur

Gast
Hi,


ich habe mal wieder was geschrieben...


Naja, klappt nur leider nicht... :roll:


Also, ich durchsuche eine Internetseite nach Bildadressen und lasse anschließend die Bilder lokal speichern. Nur, ich bekomme kein Bild. :cry:


Code:
import java.awt.image.BufferedImage;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.URL;
import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;

public class image
{
	Pattern p = Pattern.compile("src=\"(.*?)\" "); 
	
    private image()
    {
        do
        {
        	BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
        	String input;
        	try {
    			if((input = buffer.readLine()) != null)
    			{
  				if(input.startsWith("saveimg"))
  				{
                    StringTokenizer stringtokenizer = new StringTokenizer(input, " ");
                    String s29 = stringtokenizer.nextToken();
                    String s34 = stringtokenizer.nextToken();         
                    String verzeichnis = stringtokenizer.nextToken();   
                    URL url = new URL((new StringBuilder()).append(s34).toString());
                    BufferedReader br = new BufferedReader(new InputStreamReader(url.openConnection().getInputStream()));
                   
                    
                      String line;                    
                      LineNumberReader f = new LineNumberReader(new BufferedReader(new InputStreamReader(url.openConnection().getInputStream())));                     
                      while ( (line = f.readLine()) != null ) 
                      a2 = f.getLineNumber();
                      f.close();
  				    
                    
                    for(int j1 = 0; j1 < a2; j1++)
                    {
                    zeile = br.readLine();                    
                    if(zeile.indexOf("src=\"") >= 0 )
                    { 
                    	Matcher m = p.matcher(zeile); 
                    	m.reset();      

                    	while (m.find()) {
                    		a = m.group();
                    		System.out.println(a);
                    		a = a.replaceFirst("src=\"", ""); 
                    		a = a.replaceFirst("\"", ""); 
                    		System.out.println(a);
                    	}
                    	
                    	if(!a.startsWith("http://"))
                    	{
                    		if(a.startsWith("/"))
                    		{
                    			a = a.replaceFirst("/", "");
                    		}
                    		a = verzeichnis + a;
                            try {
                                URL urla = new URL(a);
                                imagew = ImageIO.read(urla);
                            } catch(Exception ex){
                                ex.printStackTrace();
                            } 
                    		System.out.println(a);
                    	}
                    	if(a.startsWith("http://"))
                    	{   
                    		System.out.println(a);
                            try {
                                URL urlz = new URL(a);
                                imagew = ImageIO.read(urlz);
                            } catch(Exception ex){
                                ex.printStackTrace();
                            } 
                    	}
                    	
                        try {
                        	
                        if(a.endsWith(".gif") || a.endsWith(".GIF"))
                        {
                        	int j = (int)(Math.random() * 43467D + 10560D);
                        	name = (Integer.toString(j) + ".gif");
                        ImageIO.write(imagew,"gif", new File(name));
                        }
                        if(a.endsWith(".jpg") || a.endsWith(".jpeg"))
                        {      
                        	int j = (int)(Math.random() * 43467D + 10560D);
                        	name = (Integer.toString(j) + ".jpg");
                        ImageIO.write(imagew,"jpg", new File(name));
                        }                    
                    } catch(Exception ex){
                        ex.printStackTrace();
                    }
                    	
                    }                   
                    }
  				
                    }
    			}
        	
    		} catch (IOException e) {
    			e.printStackTrace();
    		} 
        } while(true);
    }
   
    public static void main( String[] args ) 
    {
		new image();    	
    }
    private BufferedImage imagew; 
    public String zeile;
    String a;
    String name;
    int a2;
}



Weiß jemand ganz spontan wo der Fehler liegt? Ich sitze jetzt echt schon einige Zeit davor, aber ich weiß keinen Ausweg.

Um nochmal klar zu gehen, das wirklich am Ende die richtige URL rauskommt, lasse ich die einzelnen Schritte nochmals ausgeben, das geht alles, nur beim Speichern hakt es.



lg.
 
ouh man.

Warum wird man hier verdächtigt, nur weil der String halt s29 oder s34 heißt?
Kann es euch / dir nicht egal sein, wie ich meine Strings bennene?

Naja, deine Sache, ich weiß wer das oben geschrieben hat. Fängt zufälligerweise mit "i" an.
 
Was genau bedeutet denn s29 und s34 nun, das würde für das Verständnis deines Problems eventuell hilfreich sein.
 
Beim Lesen habe ich mich gerade auch gefragt, was denn "S34" sein soll. Das war wohl von dem Gast eher der sarkastische Hinweis darauf, dass eindeutige Variablennamen zum leichteren Verständnis beitragen. Sowohl Du selbst verstehst Deinen Code besser, als auch die Leute, die ihn lesen sollen und von denen Du Dir hilfe erhoffst.

Die Beschreibung "Ich bekomme kein Bild" ist natürlich sehr knapp. Du behauptest, dass der Url String richtig erkannt werde, dann brich doch Dein Problem auf die Problemstelle herunter. Sprich: Schreib Dir eine Testklasse, in die Du Hardcode eine feste URL zu einem Bild hineinschreibst. Z.B. die URL zu einem der Icons hier im Forumsmenu oder sowas.
Die kann man als Leser dann auch mal eben schnell testen und Du erkennst selbst vielleicht viel schneller, wo das Problem ist.
 
Ich habe natürlich auch gemerkt, daß s29 nie wieder verwendet wird aber ich wollte vom "Autor" gerne wissen, was damit gemeint ist. Für mich ist das ganz klar ein "Klau", wie auch immer praktisch realisiert.
 
Naja, sieht schon teilweise sehr merkwürdig aus 🙂 Aber darum geht's ja nicht... In dubio pro reo... und sein Problem bleibt bestehen. Aber Tips sind ja jetzt da.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben