# Datei exisitert nicht?



## Guest (7. Jul 2005)

So ich habe für mein Snake vor eine Highscore zu programmieren.
Also das Applet schreibt in die Datei und wird nacher mittels PHP auf der Html Seite ausgelesen.
Ich habe so etwas schon einmal programmiert und da hat es geklappt nur irgendwie wird die Datei nicht gefunden,
die ich einlesen will.
Anmerkung: Ich muss die Datei nämlich auch lesen damit ich den alten wert mit dem neuen vergelichen kann und nur wenn der neue > alte ist dann wird der neue in die Datei geschrieben.
Ich habe auch die Datei manuell scon einmal angelegt.
Aus Eclipse weiß ich das wnn man mit Paketen arbeitet die Datei immer eine Ordnereben höher angelegt wird.
In diesem Fall habe ich die Datei einmal im direkten Ordner und eine Ebene drüber erstellt (für alle Fälle).

So ich kann ja mal meine Methode hier reinposten.



```
public boolean readIt()
	{
		try
		{
			FileInputStream read = new FileInputStream("highscore");
			ObjectInputStream object = new ObjectInputStream(read);
			Object what = object.readObject();
			
            scoreold = Integer.parseInt(((String)what));
			   
            object.close();
            read.close();
		}
		catch(Exception e)
		{
            System.out.print("Does not exist");
			return false; //Falls die Datei nicht existiert
		}
		
		
		return true;
		
	}//readIt end
```

Hoffe ihr könnt mir helfen.

Hier noch einmal der Link zu Snake obwohl, der jetzt nicht viel aussagen kann:

Snake

mfg GagamehlO[/code]


----------



## Guest (7. Jul 2005)

achja die Exception:



java.io.EOFException
	at java.ibjectInputStream$PeekInputStream.readFully(Unknown Source)
	at java.ibjectInputStream$BlockDataInputStream.readShort(Unknown Source)
	at java.ibjectInputStream.readStreamHeader(Unknown Source)
	at java.ibjectInputStream.<init>(Unknown Source)
	at Snake.readIt(Snake.java:38)
	at Snake.highscore(Snake.java:263)
	at Snake.run(Snake.java:227)
	at java.lang.Thread.run(Unknown Source)

run ist die Methode in dem der Thread läuft der die Highscore-Methode nach dem Gameover aufruft.
Highscore ruft readIt() und nach überprüfung eventuell writeIt() auf.


mfg GagamehlO


----------



## Bert Brenner (7. Jul 2005)

Ist doch eine EOFException. Vielleicht ist die Datei leer?


----------



## Guest (7. Jul 2005)

Ne das steht ne "0" drinnen.
Habe aber auch mal am Anfang die writeIt() Methode aufgerufen und so exisitert die Datei schon mal auf jeden Fall.
Auch mit ner "0"  :lol: 

mfg Der Gast der aber in Wirklichkeit Gagamehlo ist.


----------



## Bert Brenner (7. Jul 2005)

Nur noch mal zur Sicherheit, wenn du einen ObjectInputStream benutzt würde nicht einfach nur eine 0 in der Datei erwarten, das ist dir bewusst oder?


----------



## Guest (8. Jul 2005)

Da steht eine 0 drinnen ich habe sie gerade nur in Anführungszeichen gesetzt dann mit man sie besser erkennen konnte.
Aber trotzdem ändert das ja nichts an der Tatsache das die Datei nicht gefunden werden kann.


----------



## Guest (8. Jul 2005)

Ja sry ich Idiot jetzt verstehe ich auch was du meinst.
Ok ich versuch die Datei dann mal mittels Java zu erstellen.

Das Problem ist ja eigentlich das ich nen String in die Datei schreiben will und den das aber auch mittels PHP ausgeben
will.
Das Prob ist ja dann das in der Datei immer noch Infos zum Objekt und sonstiges drinnen steht...
Wie sollte ich das am besten lösen?
Mit nem Bytestream und das nacher in Character umwandeln lassen?
Wenn das überhaupt in PHP geht. (Ich denke aber schon);


----------



## Guest (8. Jul 2005)

Ok die Datei kann jetzt gelesen werden aber nicht geschrieben werden.
Ich habe die Datei jetzt mit einer anderen Klasse erstellt.

Hier mal die Methode writeIt()


```
public boolean writeIt()
	{
		try
		{
			FileOutputStream write = new FileOutputStream("highscore");
			ObjectOutputStream object = new ObjectOutputStream(write);
            String output = ""+score;
			object.writeObject(output);
			object.close();
            write.close();
			return true;
		}
		catch(Exception e)
		{
            e.printStackTrace();
			return false; //Schreib-Fehler
		}
```



Und hier die Exception:

java.security.AccessControlException: access denied (java.io.FilePermission highscore write)
	at java.security.AccessControlContext.checkPermission(Unknown Source)
	at java.security.AccessController.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkPermission(Unknown Source)
	at java.lang.SecurityManager.checkWrite(Unknown Source)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at java.io.FileOutputStream.<init>(Unknown Source)
	at Snake.writeIt(Snake.java:64)
	at Snake.highscore(Snake.java:292)
	at Snake.run(Snake.java:252)
	at java.lang.Thread.run(Unknown Source)



```
Und hier mal der gesamte Quelltext:

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
import java.net.*;
import java.io.*;



public class Snake extends Applet implements Runnable
{
    private final int WIDTH = 10, HEIGHT = 10;//Standard-Einstellung
    private final Point[] STARTCOORDS = new Point[]{//Standard-Einstellung
    new Point(50,195),
    new Point(40,195),
    new Point(30,195),
    new Point(20,195),
    new Point(10,195),
    new Point(0,195)};

    private int score=0,scoreold=0,start,bonuscounter,foodcounter;
    private boolean end=false,paused=false,bonus=false,foodchange=false;
    private Point direction = new Point(10,0),fooddirection = new Point((int)(Math.floor(Math.random()*2)),(int)(Math.floor(Math.random()*2))); //Standard-Einstellung
    private Thread move = new Thread(this);
    private Point food = new Point(10+10*(int)(Math.floor((Math.random()*39))),10+10*(int)(Math.floor((Math.random()*39))));
    private Vector coords = new Vector();
    private Image startimage,explosion,skin,headup,headright,headdown,headleft,head,dbimage,sand,maus,mausb,mausn;

    private Graphics dbg;

    
    
    public boolean readIt()
	{
		try
		{
			FileInputStream read = new FileInputStream("highscore");
			ObjectInputStream object = new ObjectInputStream(read);
			Object what = object.readObject();
			
            scoreold = Integer.parseInt(((String)what));
			   
            object.close();
            read.close();
		}
		catch(Exception e)
		{
             e.printStackTrace();
			return false; //Falls die Datei nicht existiert
		}
		
		
		return true;
		
	}//readIt end
    
    
    
    
	public boolean writeIt()
	{
		try
		{
			FileOutputStream write = new FileOutputStream("highscore");
			ObjectOutputStream object = new ObjectOutputStream(write);
            String output = ""+score;
			object.writeObject(output);
			object.close();
            write.close();
			return true;
		}
		catch(Exception e)
		{
            e.printStackTrace();
			return false; //Schreib-Fehler
		}
		
		
		
		
	}//writeIt end
	
    
    
    
    
    
    
    
    
    

public void setAll()
{
    direction = new Point(10,0);
    move = new Thread(this);
    food = new Point(10+10*(int)(Math.floor((Math.random()*39))),10+10*(int)(Math.floor((Math.random()*39))));
    coords = new Vector();
    MediaTracker bilderladen = new MediaTracker(this);
    startimage = getImage(getCodeBase(), "snake.jpg");
    explosion = getImage(getCodeBase(), "explosion.gif");
    skin = getImage(getCodeBase(), "skin.gif");
    headup = getImage(getCodeBase(), "head.gif");
    headright = getImage(getCodeBase(), "head_right.gif");
    headdown = getImage(getCodeBase(), "head_down.gif");
    headleft = getImage(getCodeBase(), "head_left.gif");
    sand = getImage(getCodeBase(), "sand.gif");
    mausb = getImage(getCodeBase(), "mouseup_b.gif");
    mausn = getImage(getCodeBase(), "mouseup.gif");
    bilderladen.addImage(startimage,0);
    bilderladen.addImage(explosion,1);
    bilderladen.addImage(skin,2);
    bilderladen.addImage(headup,3);
    bilderladen.addImage(headleft,4);
    bilderladen.addImage(headdown,5);
    bilderladen.addImage(headright,6);
    bilderladen.addImage(sand,7);
    bilderladen.addImage(mausn,8);
    bilderladen.addImage(mausb,9);
    try
    {
            bilderladen.waitForAll();
    }
    catch(Exception e)
    {
            //nothing
    }
    head = headright;
    start=0;
    end=false;
    score=0;
    maus = mausn;
}


public void start()
{
    repaint();
     if(start!=0)  move.start();
}

public void stop() {

    move.stop();

}

//public void destroy() { }

public void run()
{
    int foodx,foody;
    for(int x=0;x<STARTCOORDS.length;x++)
    {
        coords.add(x,STARTCOORDS[x]);
    }
    bonuscounter=0;
    boolean bonusexist=false;
    for(;;)
    {



        Point schwanz = (Point) coords.get((coords.size()-1));

        for(int y=(coords.size()-1);y>0;y--)
        {
            coords.remove(y);
            coords.insertElementAt(((Point)coords.get(y-1)),y);
        }


            Point punkt = (Point) coords.firstElement();
            int horizontal,vertikal;
            horizontal = (int) punkt.getX() + (int) direction.getX();
            vertikal = (int) punkt.getY() + (int) direction.getY();
            punkt = new Point(horizontal,vertikal);
            coords.remove(0);
            coords.insertElementAt(punkt,0);
            
            foodcounter++;
        
            if(foodcounter==40)
            {
                if(foodchange) foodchange=false;
                else foodchange=true;
                
                if(foodchange)
                 fooddirection = new Point((int)(Math.floor(Math.random()*2)),(int)(Math.floor(Math.random()*2)));
                else
                fooddirection = new Point((int)(Math.floor(Math.random()*-2)),(int)(Math.floor(Math.random()*-2)));
                foodcounter=0;
            }
            
            foodx = (int)(food.getX() + fooddirection.getX());
            foody = (int)(food.getY() + fooddirection.getY());
            if((foodx>-1)&&(foody!=390)&&(foodx!=390)&&(foody!=-1))
            {
            food = new Point(foodx,foody);
            }
            

            int kopfx = (int)((Point)coords.get(0)).getX(), kopfy = (int)((Point)coords.get(0)).getY();
            foodx = (int) food.getX(); 
            foody = (int) food.getY();

            if((kopfx >=(foodx-5) && kopfx <= (foodx+5))&&(kopfy >=(foody-5) && kopfy <= (foody+5)))
            {
            food = new Point(10+10*(int)(Math.floor((Math.random()*37))),10+10*(int)(Math.floor((Math.random()*37))));
            coords.add(schwanz);
            bonusexist=false;
            if(bonus){
            score+=15;
            maus = mausn;
            bonus=false;
            fooddirection = new Point((int)(Math.floor(Math.random()*2)),(int)(Math.floor(Math.random()*2)));
            foodcounter=0;
            }
            else score++;
            }

            if((score%10==0)&&(!bonus)&&(score!=0)&&(!bonusexist))
            {
                maus = mausb;
                bonus=true;
                bonusexist=true;
                bonuscounter=70;
            }

            if(bonus)
            {

                bonuscounter--;
                if(bonuscounter==0){
                    bonus=false;
                    maus = mausn;
                    food = new Point(10+10*(int)(Math.floor((Math.random()*37))),10+10*(int)(Math.floor((Math.random()*37))));
                }
            }




        for(int x=1;x<coords.size();x++)
        {
        int teilx = (int)((Point)coords.get(x)).getX();
        int teily =  (int)((Point)coords.get(x)).getY();
        if((kopfx >=(teilx-5) && kopfx <= (teilx+5))&&(kopfy >=(teily-5) && kopfy <= (teily+5)))
        {
                end=true;
                repaint();
                highscore();
        }

        }




            if(kopfx>400) ((Point)coords.get(0)).x=0;
            else if(kopfy>400) ((Point)coords.get(0)).y=0;
            else if(kopfx<0) ((Point)coords.get(0)).x=390;
            else if(kopfy<0) ((Point)coords.get(0)).y=390;


        repaint();

        if(paused) move.suspend();


        try
        {
            Thread.sleep(70);
        }
        catch(Exception e)
        {
            //Nothing
        }

    }

}//run end



public void highscore()
{   
                
               
                if(readIt())
                {
                    if(score>scoreold) writeIt();
                   
                    
                }
                AppletContext Context = getAppletContext(); 
                try 
                {  

                Context.showDocument(new URL("http://www.bg.bib.de/~bbth3dbl/welcome.php"), ""); 
                } catch (Exception ex)
                {
                    ex.printStackTrace();
                    //Nothing
                }
                
                
                stop();
    
    
}


public void update(Graphics g)
{
    if(dbimage==null)
    {
         dbimage = createImage(this.getSize().width, this.getSize().height);
         dbg = dbimage.getGraphics ();


    }


     dbg.setColor (getBackground ());
     dbg.fillRect (0, 0, this.getSize().width, this.getSize().height);


    dbg.setColor (getForeground());
    paint (dbg);

    g.drawImage(dbimage,0,0,this);



}



public void paint(Graphics g)
{



    g.setColor(Color.red);
    if(start==1)
    {

        g.drawImage(sand,0,0,this);
        g.drawImage(maus,(int) food.getX(),(int) food.getY(),this);
        for(int x=0;x<coords.size();x++)
        {
            if(x==0)
            {
                g.setColor(Color.BLACK);
                g.drawImage(head,(int)((Point)coords.get(x)).getX(),(int)((Point)coords.get(x)).getY(),this);
                g.setColor(Color.RED);


            }
            else
            g.drawImage(skin,(int)((Point)coords.get(x)).getX(),(int)((Point)coords.get(x)).getY(),this);

        }

        if(end) g.drawImage(explosion,(int)((Point)coords.get(0)).getX()-20,(int)((Point)coords.get(0)).getY()-20,this);

        
        
        g.setColor(Color.white);
        g.drawString("Sie haben " + score + " Punkte !",20,10);
        if(bonus)  g.drawString("Bonuscounter " + bonuscounter +"",180,10);

        if(end) g.drawString("Gameover! Zum Neustarten bitte die Leertaste drücken",20,200);
        if(paused) g.drawString("<----Pause---->",150,200);
    }
    else if(start==0)
    {
    //g.drawString("Start",60,60);
    g.drawImage(startimage,0,0,this);
    }
    else{

        g.drawString("Error...",20,20);
    }

}



    public boolean keyDown(Event e,int key)
    {
        if(key==Event.LEFT)
        {
            if((((int) direction.getX()==10))&&(((int) direction.getY()==0))){ direction = new Point(0,-10); head = headup; }
            else if((((int) direction.getX()==-10))&&(((int) direction.getY()==0))){ direction = new Point(0,10); head = headdown; }
            else if((((int) direction.getX()==0))&&(((int) direction.getY()==-10))){ direction = new Point(-10,0); head = headleft; }
            else if((((int) direction.getX()==0))&&(((int) direction.getY()==10))){ direction = new Point(10,0); head = headright; }
        }
        else if(key==Event.RIGHT)
        {
            if((((int) direction.getX()==10))&&(((int) direction.getY()==0))){ direction = new Point(0,10); head = headdown; }
            else if((((int) direction.getX()==-10))&&(((int) direction.getY()==0))){ direction = new Point(0,-10); head = headup; }
            else if((((int) direction.getX()==0))&&(((int) direction.getY()==-10))){ direction = new Point(10,0); head = headright; }
            else if((((int) direction.getX()==0))&&(((int) direction.getY()==10))){ direction = new Point(-10,0); head = headleft; }
        }
    else if((key==32)&&(start==0))
    {
        start=1;
        start();
    }
    else if((key==32)&&(start==1)&&(end))
    {
        removeAll();
        setAll();
        start();
    }
    else if((key==112)&&(start==1)&&(!end))
    {
            if(!paused) paused=true;
            else{ paused=false;
                move.resume();
            }
    }


         return true;
    }





    public void init()
    {
        setAll();

    }//init end


}//class End
```



Der Quelltext ist nen bißchen durcheinander, da ich eigentlich nicht dachte das ich sowiet kommen würde und einfach mal drauflos programmiert habe.
Deswegen wurde ältere durch jüngere Teile ersetzt und nen paar Variablen-Deklartionnen könnten jetzt woanders stehen etc...

Das kommt eben davon wenn man nicht venünftig plant.






[/code]


----------



## The_S (8. Jul 2005)

Du musst dein Applet signieren. Wenn du nicht weißt, was das ist, kannst du mal im Forum danach suchen.


----------



## Bert Brenner (8. Jul 2005)

Trenn dich mal von deinem ObjectOutputStream und schau dir doch mal RandomAccessFile an.


----------

