Frage

Ich bin vor diesem seltsamen Problem.

Ich versuche, eine Datei zu lesen, die in einer anderen Maschine als gemeinsame Ressource befindet:

\\remote-machine\dir\MyFileHere.txt

Wenn ich eine eigenständige Anwendung (eine 16 Zeilen Java-Datei) laufe alles ist gut so. Aber wenn ich versuche, mit der Verwendung der gleichen Klasse die gleiche Datei zu lesen und das gleiche Verfahren von einem Server „Motor“ (dies ist eine Anwendungs-Engine, so ziemlich wie ein Java EE Application Server, wo Sie Java-Programme ausführen kann) die „FileNotFoundException“ geworfen wird.

ich aber werde ich eine Art von Berechtigungen sein, so map ich die Ressource als Antrieb: K: \

Re-run meiner Java-Datei liest, in Ordnung.

Re-run meiner Java-Datei in dem "Motor". -> FileNotFoundException

Wenn ich die Datei in den lokalen Rechner kopieren (C: \ MyFileHere.txt). Wird keine Ausnahme ausgelöst

Frage

Was kann dieses FileNotFoundExcecption verursacht?

Ich bin mit Java 1.5

Soweit ich den Motor so ziemlich verwendet Java transparent wissen.

Wer hat konfrontiert etwas ähnliches?

Weitere Frage? Was wäre dies ein guter Ansatz für Abhilfe sein? Ich fange an, über eine Tomcat-Installation zu denken, diese Dateien zu dienen und sie durch http lesen, aber ich denke, das ist zu viel, das ist, warum das SMB-Protokoll für den ersten Platz ist, nicht wahr? Und wahrscheinlich werde ich nicht in der Lage sein, Steckdosen ohnehin zu öffnen.

Hat Security Manager die Ursache sein kann (ich nie zuvor verwendet haben, aber ich weiß, es existiert)

Wound't eine Security geworfen werden, anstatt wenn das der Fall wäre?

Vielen Dank.

Bearbeiten

Gelöst. Danke Steve W.

Es stellt sich heraus, dass dieser Motor mit „LaunchAnywhere“ von ZeroG gestartet wird. So wird eine .exe erstellt, die wiederum eine JVM mit der angegebenen Anwendung ausführen.

Diese Anwendung selbst ist Launcher. Wenn es um den Motor zu starten, irgendwie (ich kann nicht herausfinden, warum oder wie) der Benutzer, der die JVM-Prozess besitzt, ist SYSTEM. AS Steve wies darauf hin, ist dieser Benutzer nicht NETWORK Zugriff hat und somit nicht von einer gemeinsam genutzten Ressource oder einem zugeordneten Laufwerk gelesen werden kann.

Die Abhilfemaßnahme (während ich dies dem Hersteller melden) ist eine .cmd-Datei erstellen manuell den Motor lauch. Da es der Benutzer manuell gestartet werden würde hat Zugriff auf das Netzwerk.

Ich habe „Process Explorer“ von Sysinternals verwendet genau die Befehlszeile zu wissen, verwendet, um den Motor App ausgeführt werden.

WHAT A MESS!

Dank denen, die Antworten gepostet.

War es hilfreich?

Lösung

Ist die gemeinsam genutzte Ressource durch einen Benutzernamen und ein Passwort geschützt? Und wenn ja, ist Ihre Anwendung Motor als dieser Benutzer ausgeführt wird? Wenn Ihre Anwendung Motor als Windows-Dienst ausgeführt wird, kann der Windows-Dienst nicht als „Lokales Systemkonto“ ausgeführt werden. Dieses Konto kann nicht auf das Netzwerk zugreifen. Sie müssen den Dienst so konfigurieren, als Benutzer ausgeführt werden, der die Rechte hat, um den gemeinsam genutzten Laufwerk zugreifen zu können.

Andere Tipps

Überprüfen Sie, ob die Datei wirklich „MyFileHere.txt“ genannt wird und nicht „MyFileHere.txt.txt“ Wenn Sie die Erweiterung der Datei versteckt ist dies ein einfacher Fehler zu verpassen

Haben Sie die Ereignisprotokolle auf dem Server überprüft, ob es abgelehnt wird? es könnte sein, dass das Programm unter einem anderen Benutzerkonto ausgeführt wird, als Sie denken.

Ich bin mit Java nicht vertraut, aber ich weiß, mit einigen Programmen die ich geschrieben habe ich Network Service hätte, damit die Ressourcen zugreifen zu können.

Eigentlich sehe ich, dass Sie jetzt eine Antwort als richtig beantwortet haben. ach ja, und es war das gleiche wie meine Antwort :) Cool!

Ich hatte mal ein ähnliches Problem. Ich denke, es zu tun hat mit der Art und Weise Java Remote-Dateien URI aufgelöst wird. Versuchen Sie, die folgenden und sehen, ob es funktioniert:

Datei: ////remote-machine/dir/MyFileHere.txt

Ich benutzen das Folowing Beispiel die Existenz einer Datei in freigegebenen Ordnern in meiner Box zu überprüfen und gearbeitet:

public static void main(String[] args) throws URISyntaxException{
    URI uri = new URI(args[0]); //args[0] = File:////remote-machine/dir/MyFileHere.txt
    File f = new File(uri);
    System.out.print(String.format("File %1$s Exists? %2$s", args[0],f.exists()));
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top