Datei kann nicht geladen werden...

javaman13

Mitglied
Hallo Leute mal wieder in diesem Forum mit nem neuen Problem
Mein Code:
Java:
import java.io.*;
import java.util.*;

public class WorldLoader {
	public void load(File worldLoadPath){
		try{
			Scanner worldScanner = new Scanner(new File("save/level1.lv"));
			
			while(worldScanner.hasNext()){
				for(int y = 0; y<Screen.worldHeight; y++){
					for(int x = 0; x<Screen.worldWidth; x++){
						Screen.underGround[x][y] = worldScanner.nextInt();
						System.out.println("Lade: Underground [" + x + "] [" + y + "] = ");
					}
				}

				for(int y = 0; y<Screen.worldHeight; y++){
					for(int x = 0; x<Screen.worldWidth; x++){
						Screen.ground[x][y] = worldScanner.nextInt();
					}
				}
				worldScanner.close();

				for(int y = 0; y<Screen.worldHeight; y++){
					for(int x = 0; x<Screen.worldWidth; x++){
						Screen.upperGround[x][y] = worldScanner.nextInt();
					}
				}
			}
			
			
		} catch(IOException e) { e.printStackTrace();
								 System.err.println("System konnte nicht erfolgreich laden!");}
	}
}

gibt mir immer das aus
Code:
java.io.FileNotFoundException: save\level1.lv (Das System kann den angegebenen Pfad nicht finden)
	at java.io.FileInputStream.open(Native Method)
	at java.io.FileInputStream.<init>(Unknown Source)
	at java.util.Scanner.<init>(Unknown Source)
	at WorldLoader.load(WorldLoader.java:9)
	at Screen.loader(Screen.java:26)
	at Screen.<init>(Screen.java:16)
	at Window.<init>(Window.java:7)
	at Launcher.main(Launcher.java:12)
System konnte nicht erfolgreich laden!
 
Er kann die Datei nicht finden.

Vermutlich suchst du nicht da, wo du denkst, dass du suchst ;D
 
Schreib Zeile 7 mal in folgende drei Zeilen um:
[JAVA=7]
File saveFile = new File("save/level1.lv");
System.out.println(saveFile.getAbsolutePath());
Scanner worldScanner = new Scanner(saveFile);
[/code]
 
Ich hab das mal getan, und dann den final path genommen, es hat aber wieder den gleichen Fehler angezeigt. Dann habe ich mal das File auf C: verschoben und siehe da... es hat funktioniert... woran liegt das, bzw wie bring ich es zusammen, das es auch so funktioniert?
ah ja, wenn ich es mit dem C: Pfad mache bekomm ich die meldung exceptionnotfound... was is damit gemeint?

LG javaman
 
Also das mit dem Exception not found hab ich hinbekommen...
Nur hab ich ne :
Code:
java.lang.IllegalStateException: Scanner closed
	at java.util.Scanner.ensureOpen(Unknown Source)
	at java.util.Scanner.hasNext(Unknown Source)
	at WorldLoader.load(WorldLoader.java:11)
	at Screen.loader(Screen.java:26)
	at Screen.<init>(Screen.java:16)
	at Window.<init>(Window.java:7)
	at Launcher.main(Launcher.java:12)
System konnte nicht erfolgreich laden!

der Code sieht übrigens nun so aus:

Java:
import java.io.*;
import java.util.*;

public class WorldLoader {
	public void load(File worldLoadPath){
		try{
			File saveFile = new File("C:/level1.lv");
			System.out.println(saveFile.getAbsolutePath());
		 	Scanner worldScanner = new Scanner(saveFile);
			
			while(worldScanner.hasNext()){
				for(int x = 1; x<Screen.worldWidth; x++){
					for(int y = 1; y<Screen.worldHeight; y++){
						Screen.underGround[x][y] = worldScanner.nextInt();
						System.out.println("Lade: Underground [" + x + "] [" + y + "] = "+ Screen.underGround[x][y]);
					}
				}

				for(int x = 1; x<Screen.worldWidth; x++){
					for(int y = 1; y<Screen.worldHeight; y++){
						Screen.ground[x][y] = worldScanner.nextInt();
						System.out.println("Lade: Ground [" + x + "] [" + y + "] = "+ Screen.ground[x][y]);
					}
				}
				
				for(int x = 1; x<Screen.worldWidth; x++){
					for(int y = 1; y<Screen.worldHeight; y++){
						Screen.upperGround[x][y] = worldScanner.nextInt();
						System.out.println("Lade: Upperground [" + x + "] [" + y + "] = "+ Screen.upperGround[x][y]);
					}
				}
				worldScanner.close();
			}
			
			
		} catch(Exception e) { e.printStackTrace();
								 System.err.println("System konnte nicht erfolgreich laden!");}
	}
}

Hier mal das file:

Code:
101 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
102 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
103 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
104 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
105 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
106 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
107 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
108 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
109 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
110 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
111 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
112 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
113 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
114 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
115 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
116 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
117 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
118 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
x3
 
Java:
    public void load(File worldLoadPath){
        try{
            File saveFile = new File("C:/level1.lv");

Dieses Konstrukt verstehe ich nicht. :bahnhof:

Wenn Du doch einen File-Parameter in die Methode reinschiebst, warum nutzt den dann nicht, sondern nimmst einen hard-kodierten Pfad?

Weiterhin ist das Programm so nicht übersetzbar, weil Screen fehlt.😉
 
Dein Fehler ist, du darfst den Scanner erst außerhabl der while-Schleife schließen.

Du hast
Java:
while(worldScanner.hasNext()) {
...
worldScanner.close();
}

Musst das aber so machen:
Java:
while(worldScanner.hasNext()) {
...
}
worldScanner.close();

Dann sollte die IllegalStateException nicht mehr kommen.
 
Benutze lieber Java7-Methoden!
Du kannst deinen Scanner in ein try-with-resource eingliedern, das macht die Sache viel einfacher.


Wenn deine Datei in einer .jar ist, kannst du sie nicht mit java.io.File erreichen. Hier muss man mit URLs arbeiten.
 
So mal kurz gemacht, jetzt eh keine IllegalStateException mehr... hier übrigens mal der ganze Ordner

P.s: Als ich den Ordner als ZIP hochladen wollte hat es nicht funktioniert, also hab ich das kurzerhand mit der Dateiendung .jar hochgeladen... soll heißen einfach.zip umbenennen und alles geht!
 

Anhänge

Du kannst das nicht in dem Ordner schicken. Dein Gegenüber müsste dafür einen Compiler haben.

Ich meinte, das ich das in einem ganzen auf java-forum.org stellen kann... gibts keine möglichkeit, wie isch das, wenn ich eine .jar Datei habe innerhalb machen kann?

übrigens ist es nicht fest codiert, weil, wie man auch sieht, die welt die geladen werden sol von außen übergeben wird
 
wenn das fertig ist und ich es als JAR an jemanden weierschicke, wie soll ich das mit den welten machen?
Ich mein es wär ja sinnlos, wenn der immer den code umschreiben muss...
 
Er kann auch den Code nicht mehr umschreiben. Eine JAR kann man nicht mehr verändern.
Du hast verschiedene Möglichkeiten:
Die save-Datei ist eine Geschwisterdatei, also im gleichen Verzeichnis wie die JAR.
Die save-Datei ist an irgendeiner fixen Stelle der Festplatte, vorzugsweise user.home (
Code:
System.getProperty("user.home");
)
 
OK... wie könnte ich das machen, wenn ich die save-Datei als eine Geschwisterdatei, also im gleichen Verzeichnis wie die JAR nehme. Ich weis ich bin in diesem Thema noch sehr unerfahren 😉
 
Du könntest einfach die Datei beim Starten der .jar-Datei erstellen. Du speicherst zum Beispiel eine Vorlage IN der .jar, liest diese ein, und schreibst das dann in die Datei die du erstellt hast. An der erstellten Datei kannst du dann rumbasteln.

Ich hab mir jetzt nicht deine .jar-Datei angeguckt und weiß jetzt nicht genau was das Problem ist, aber das wär mein Lösungsvorschlag auf deine Frage 😀
 
Es gibt drei Möglichkeiten:
1. Du hast nicht nur eine JAR, sondern einen ganzen Ordner in ZIP/RAR, in dem auch deine JAR ist und dein save-File etc. Du müsstest dann die ZIP als Download zur Verfügung stellen.
2. Da das Ziel ja anscheinend ist, solche save-Files zu ändern (und somit wahrscheinlich auch neu zu erstellen), kannst du einfach eine Datei als Geschwisterdatei deklarieren:
Code:
new File("savefile");
verweist auf "X:/Xyz/Xyz2/OrdnerMitJar/savefile"
3. Falls du eine "Vorlage-Datei" hast, kannst du sie zuerst entpacken mittels URL und mit Möglichkeit 2.
 

Neue Themen


Zurück
Oben