windows - Java: System.getenv ('APPDATA') returnerer null, hvad nu?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har lige fundet ud af, at når et Java-program startes på Windows via 'Kør som ...' (fra den eksekverbare s kontekstmenu) som en anden bruger, vil et opkald til System.getenv("APPDATA") returnere null , snarere end den sædvanlige applikationsdata mappe.


Nu er jeg lidt af en noob, når det kommer til Windows mapper og sådan, så mit spørgsmål er, hvordan skal jeg håndtere denne situation, når mit program skal kunne gemme sine data et sted for at kunne fungere korrekt? Mere specifikt , hvis System.getenv("APPDATA") returnerer null, tillader jeg endda tilladt at gemme nogen data overhovedet, og i bekræftende fald, hvor? Tak på forhånd!

Bedste reference


Okay, jeg løste mit eget problem ved hjælp af JNA:


com.sun.jna.platform.win32.Shell32Util.getFolderPath(int nFolder)


hvor nFolder = 0x001a for applikationsdatamappen og nFolder = 0x001c for den lokale applikationsdata mappe. På Windows XP er outputen



  C: \ Documents and Settings \ [[Brugernavn]] \ Programdata

  
  C: \ Documents and Settings \ [[Brugernavn]] \ Lokale indstillinger \ Programdata



Vigtigst er det, at dette ikke vender tilbage null, når programmet startes via Run As.

Andre referencer 1


Ja, du har altid lov til at gemme data. Du kan bruge temp bibliotek til at gemme data. Du kan få temp-mappe med System.getProperty("java.io.tmpdir");. [11]

Andre referencer 2


Også hvis du indstiller en miljøvariabel i Windows, bemærkede jeg, at Java ikke hentede det, før jeg startede OS igen.