pfad.exists() gilt nicht für "//server/a/xyz.jpg"?

  • Themenstarter Themenstarter vogel_ma
  • Beginndatum Beginndatum
V

vogel_ma

Gast
File pfad=new File("//Server/a/xyz.jpg");
Boolean b=pfad.exists();

Ich möchte wissen, ob die Datei "xyz.jpg" exitiert, mit pfad.exists() habe ich immer "false" bekommen, obwohl die Datei existiert.

Kann jemand mir sagen, ob pfad.exists() für solche "externe" Dateien noch gilt? Wenn nein, wie kann ich wissen, ob eine "externe" Datei existiert?

Vielen Dank!
 
Hab ich in meinem code irgendwo gefunden - das tut auch.

Java:
	private static boolean fileExists(String pFile) {
		try {
			File f = new File(pFile);
			return f.exists();
		} catch(Exception e) {
			return false;
		}
	}

EDIT: Du prüfst ja auch einen Netzwerk Laufwerk .... das hab ich übersehen
Keine Ahung wie man das machen müsste ....
 
Zuletzt bearbeitet:
@Andi_CH: Das ist aber schlecht. Völlige Fehlerverschleierung was du da machst.

EDIT: Bei mir klappt das übrigens mit dem exists() für remote Files.
 
Zuletzt bearbeitet:
Hab ich in meinem code irgendwo gefunden - das tut auch.

Java:
	private static boolean fileExists(String pFile) {
		try {
			File f = new File(pFile);
			return f.exists();
		} catch(Exception e) {
			return false;
		}
	}

EDIT: Du prüfst ja auch einen Netzwerk Laufwerk .... das hab ich übersehen
Keine Ahung wie man das machen müsste ....

Ja, für remote Files. Trotzdem danke!
 
@Andi_CH: Das ist aber schlecht. Völlige Fehlerverschleierung was du da machst.

EDIT: Bei mir klappt das übrigens mit dem exists() für remote Files.
Ich habe nicht behauptet, das sei die ultimative Lösung ;-) es war auch noch ein wenig mehr drin im catch - aber nicht sehr viel. Ich wollte da wirklich nur wissen ob File und Pfad exisiteren. Falls nein wird versucht den Pfad zu erstellen.

Hm, geht das optimaler?
Java:
	private static void createOutDir(String pDir) {
		try {
			File f = new File(pDir);
			String[] parts = null;
			parts = pDir.split("/");
			String path = "";
			for(String s : parts) {
				path += s + "/";
					f = new File(path);
					if (!f.exists()) {
						f.mkdir();
					}
			}
		} catch (Exception e) {
			System.err.println("EXEPTION : createOutDir");
			e.printStackTrace();
		}
	}
 
Ich habe nicht behauptet, das sei die ultimative Lösung ;-) es war auch noch ein wenig mehr drin im catch - aber nicht sehr viel. Ich wollte da wirklich nur wissen ob File und Pfad exisiteren. Falls nein wird versucht den Pfad zu erstellen.
das File gibt es, aber aufgrund eines anderen Fehlers nimmst du an es tut es nicht ?!

Nach dem Motto du rufst bei jemanden an um zu schauen, ob er zu Hause ist. Er ist zwar, hat aber das Telefon ausgeschaltet, ergo denkst du er sei nicht da

und splitten des Files und dann die einzelteile auszuprobieren ist unsinnig... wenn das erste File existiert, existieren auch seine "Bestandteile". Existiert ein "Bestandteil" nicht, so existiert das File auch nicht...

edit... erst jetzt gesehen
Falls nein wird versucht den Pfad zu erstellen
das kann so ziemlich bös ausgehen... File existiert, du denkst aber nicht, legst es neu an und überschreibst das bisherige....
 
Zuletzt bearbeitet von einem Moderator:
Bei mir klappt das übrigens mit dem exists() für remote Files.
Bei mir im zweiten Anlauf auch - ich habe den Freigabenamen vergessen.
Java:
System.out.println(fileExists("M:/tmp/mail.jar"));
System.out.println(fileExists("//SERVER3/tmp/mail.jar"));
System.out.println(fileExists("//SERVER3/mbh/tmp/mail.jar"));
mbh ist eben der Freigabename, der muss da hin

Output:
Code:
true
false
true

Allerdings ist bei M: ein Passwort hinterlegt - eigentlich wundert es mich, dass ich da über den Namen zugreifen kann
 
Zuletzt bearbeitet:
Bei mir im zweiten Anlauf auch - ich habe den Freigabenamen vergessen.
Java:
System.out.println(fileExists("M:/tmp/mail.jar"));
System.out.println(fileExists("//SERVER3/tmp/mail.jar"));
System.out.println(fileExists("//SERVER3/mbh/tmp/mail.jar"));
mbh ist eben der Freigabename, der muss da hin

Output:
Code:
true
false
true

Allerdings ist bei M: ein Passwort hinterlegt - eigentlich wundert es mich, dass ich da über den Namen zugreifen kann

Was ist "Freigabename"? Z.B. ich habe den Ordner "Tomcat" im Rechner 111.222.333.444 freigegeben, dann teste ich an einem anderen Rechner, ob die Datei "\\111.222.333.444\Tomcat\a.jpg" existiert.

Mit
Boolean b=new File("\\\\111.222.333.444\\Tomcat\\a.jpg").exists();
habe ich immer noch "false" bekommen, und mit
Boolean b=new File("//111.222.333.444/Tomcat/a.jpg").exists();
auch "false".

Kann das sein, dass es an Firewall liegt?
 
Was ist "Freigabename"? Z.B. ich habe den Ordner "Tomcat" im Rechner 111.222.333.444 freigegeben, dann teste ich an einem anderen Rechner, ob die Datei "\\111.222.333.444\Tomcat\a.jpg" existiert.

Mit
Boolean b=new File("\\\\111.222.333.444\\Tomcat\\a.jpg").exists();
habe ich immer noch "false" bekommen, und mit
Boolean b=new File("//111.222.333.444/Tomcat/a.jpg").exists();
auch "false".

Kann das sein, dass es an Firewall liegt?
Firewall??? Gehst du übers Internet?

Du hast, als du den Ordner freigegeben hast (ich nehme an es handelt sich um Windows) einen Namen für die Freigabe definiert. Es ist schon möglich dass der "zufälligerweise" auch Tomat ist.

Das findest du aber raus, wenn du mit einem Dateiexplorer über "Netzwerk" deinen Server suchst und nachsiehst was der so freigibt.

Da die Abfragen bei zweien geklappt hat, handelt es sich ja wohl nicht um ein Java-Problem. Wenn Du mit dem Dateiexplorer die Datei auch nicht findest, müsstest du eher in einem Windows-Forum nachfragen.
 
Zuletzt bearbeitet:

Zurück
Oben