Schreibberechtigung bei Vista
lima-city → Forum → Programmiersprachen → Java
all
anwenden
berechtigung
code
compiler
datei
dokument
einstellung
ergebnis
frage
glauben
liegen
machen
pfad
problem
programm
string
test
url
windows
-
Kann es sein, dass eine Javaanwendung bei Vista keine Schreibberechtigungen erhält?
Der FileWriter wirft bei Vista eine IOException aus, die ich bei XP nicht bekomme. Wie kann ich mir die Berechtigung einholen?
EDIT: Habe einen Teil des Problemes gelöst: Durch Verwendung eines BufferedWriters wird dieses Problem behoben. Doch lässt sich ein BufferedWriter nicht auf einen FileOutputStream anwenden... wie macht man das dann?
Beitrag zuletzt geändert: 4.9.2009 20:59:07 von toolz -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
toolz schrieb:
Doch lässt sich ein BufferedWriter nicht auf einen FileOutputStream anwenden... wie macht man das dann?
Zum einen brauchst du bei BufferedWriter gar keinen FileOutputStream, sondern ein FileWriter reicht:
BufferedWriter writer = new BufferedWriter (new FileWriter ("/home/lorenzo/test") ); writer.write ("Test"); writer.flush (); writer.close ();
Falls du aber von außen einen FileOutputStream bekommst und den unbedingt nutzen musst, dann kannst du das so machen:
FileOutputStream fos = weirdFunctionWhereIgetThisStreamFrom (); BufferedWriter writer = new BufferedWriter (new FileWriter (fos.getFD () ) ); writer.write ("Test"); writer.flush (); writer.close ();
Beitrag zuletzt geändert: 4.9.2009 21:45:19 von census -
Ich muss den FileWriter leider umgehen, siehe hier.
Warum ist das bei Vista so? Vielleicht hilft es ja weiter, das zu wissen. -
Also in meinem Beispiel in dem anderen Thread benutze ich einen FileOutputStream und der funktioniert ohne Probleme.
Was für ein Framework benutzt du außenrum, weil du schon mehrmals gepostet hast, dass DEIN Javacompiler andere Ergebnisse liefert als der Compiler, den der Rest benutzt (z.B. Schleifen wo keine sind, Writer die nicht funktionieren, etc.)
Man kommt mit der Sun-java.io API ohne Probleme auf's Dateisystem runter, egal ob XP, Vista, 7 oder LInux. Du kriegst halt ein Access denied, wenn die Credentials des Users, der die JRE startet, nicht ausreichen, um dahin zu schreiben.
toolz schrieb:
Der FileWriter wirft bei Vista eine IOException aus, die ich bei XP nicht bekomme. Wie kann ich mir die Berechtigung einholen?
Was sagt denn die Exception. Poste mal den Stacktrace und die Message. -
Die Exception bekomme ich aus der Konsole, habe sie aber im Code durch [catch (IOException ioe) {] abgefangen und eine Meldung auf einem JFrame ausgegeben.
census schrieb: Also in meinem Beispiel in dem anderen Thread benutze ich einen FileOutputStream und der funktioniert ohne Probleme.
Der funktioniert auch, aber nicht in Vista. (Jedenfalls nicht ohne die Berechtigung oder was auch immer...)
Ich möchte aber, dass das Programm auch läuft, wenn ein Vista User nicht die richtige Berechtigung hat. Notfalls soll diese Windows Vista Sicherheitsnachricht kommen, mit der die Rechte gegeben werden können.
Beitrag zuletzt geändert: 5.9.2009 16:32:09 von toolz -
änder doch mal deinen code auf:
{ //hier passiert der Fehler } catch (Exception exception) { exception.printStrackTrace (); }
und poste das ganze. Btw, an Vista liegt's nicht. Ich glaube das ist eher ein Fehler 42.
Beitrag zuletzt geändert: 5.9.2009 19:27:53 von census -
Das geht nicht, da ich auf dem Vista- Rechner die Ausgabezeile meines Compilers nicht sehe, ganz einfach, weil mein Compiler nicht auf Vista ist.
-
toolz schrieb:
Das geht nicht, da ich auf dem Vista- Rechner die Ausgabezeile meines Compilers nicht sehe, ganz einfach, weil mein Compiler nicht auf Vista ist.
Und was genau hat jetzt das ganze mit deinem Compiler zu tun?
printStackTrace() gibt zur Laufzeit den stack trace der Exception auf der Console aus. Jetzt sag net unter Vista gibt's keine Konsole. Das ist das schwarze Fenster mit den weißen Buchstaben. -
Da kommt:
java.io.FileNotFoundException: C:\[...] <Das System konnte den angegebenen Pfad nicht finden> at java.io.FileOutputStream.open<Native Method> at java.io.FileOutputStream.<init><Unknown Source> at java.io.FileOutputStream.<init><Unknown Source> [Verweise auf die Codezeile mit dem FileOutputStream] at java.lang.Thread.run<Unknown Source>
Beitrag zuletzt geändert: 7.9.2009 17:58:22 von toolz -
Moin,
die Fehlermeldung ist ja schonmal eindeutig.
Die angegebene Datei wird also nicht gefunden, demnach muss der Pfad falsch sein.
Wie schaut es denn mit Code aus?
Ich meine, dass eine Fehleranalyse damit eindeutig einfacher wäre.
Gruß,
Pawnee -
Das wird wohl daran liegen, dass Java die Datei erstellen soll
Allerdings habe ich es jetzt mit einem
new File("C:\[...]")
versucht, um die Datei zunächst zu erstellen, aber das hat nichts geändert. Dann nochmal, indem ich die Datei zunächst von Hand erstellt habe, aber das ging auch nicht. (Der Pfad ist korrekt, funktioniert auch bei XP)
Den Code kann und will ich euch nicht antun (938 Zeilen). -
Ja, das geht dann.
Aber habe ich mit Java irgendeine Möglichkeit, das zu umgehen, eine Erlaubnis zu erbitten, etc. ? -
ich glaube über die registrierungs-datenbank von windows müsste das gehen. aber frag mich nicht, welcher schlüssel das ist!
-
Gib einfach dem Account, unter dem die JVM gestartet wird die notwendigen Rechte auf das Verzeichnis und schon geht das. Die NTFS-Rechte dafür reichen; gib z.B. dem Nutzer "toolz" rwx auf das Zielverzeichnis und aktiviere die Rechtevererbung.
-
Und wie macht man das?
(Hiermeit meine ich nicht, wie ich mir in Vista die Berechtigung geben kann, sondern, wie ich durch mein Programm diese anfragen kann.)
Ich möchte diese Einstellung nicht manuell übernehmen, sondern das Programm soll das für mich machen.
Wer sich überlegt, hier rein zu schreiben, das aber ohne Java- Befehl, verfehlt meine Fragestellung... -
Noch eine andere Frage zur Sicherheit? Escapest du die Backslashes in deinem Pfad?
Also nicht
String path = "C:\test.txt"
sondern
String path = "C:\\test.txt"
-
Ja Ansonsten wird ja auch sofort die Codezeile rot markiert.
Aber kann mir mit den Berechtigungen denn keiner weiterhelfen?
Beitrag zuletzt geändert: 8.9.2009 20:31:38 von toolz -
Wie wär's wenn du einfach mal den gesamten Code postest oder als jar, tar, zip, etc hochlädst und hier verlinkst. Im Dunkeln rumstochern ist nicht sehr zielführend.
Den Code am besten lauffähig, also nicht nur Fragmente sondern "as is". -
Am Code wirds nicht liegen. Höchstens, dass ich mir die Berechtigung nicht hole, aber ich frage ja gerade, wie das geht.
Ihr braucht wirklich nicht mehr als das:
java.io.FileOutputStream fos0 = new java.io.FileOutputStream("C:\\Dokumente und Einstellungen\\All Users\\Test.htx"); BufferedOutputStream bos0 = new BufferedOutputStream(fos0); for (String n : "01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F".split(" ")) { bos0.write(Integer.parseInt(n, 0x10)); } bos0.flush(); //[...] bos0.close();
Im Grunde bräuchte man gar keinen Code, um meine Frage zu beantworten.
Beitrag zuletzt geändert: 9.9.2009 16:58:59 von toolz -
toolz schrieb: Am Code wirds nicht liegen.[...]
Im Grunde bräuchte man gar keinen Code, um meine Frage zu beantworten.
Es liegt doch am Code, aber egal. Vista kennt keine lokalisierten Pfade wie "Dokumente und Einstellungen": den Pfad gibt es nicht. Diesen Pfad gaukelt dir dein Windows-Explorer nur vor. Nimm den physikalischen Namen und es funktioniert. Ich glaube unter Vista (ich selbst habe keines) heißt das \users, also in deinem Fall "c:\users". Sag jetzt bitte nicht, du hättest ein deutsches Windows, weil es ab Vista eben keine lokalisierten Pfade mehr gibt und es deswegen irrelevant ist.
Ich hoffe ich konnte helfen.
EDIT:
Ich meine "Dokumente und Einstellungen\All users" heißt unter Vista "users\default", aber ohne Gewähr. Google hilft da aber weiter.
Beitrag zuletzt geändert: 9.9.2009 22:52:45 von census -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage