24. september 2006 - 13:48
Der er
31 kommentarer og 1 løsning
Java: Indstillinger fra .ini-fil?
Jeg har et program, som f.eks. skal bruge nogle data til at connecte til en mySQL server. Det kunne være smart, hvis jeg kunne lave sådan, at programmet hentede disse data (dvs. hostname, user, pass og database) fra en .ini-fil eller noget lignende. Nogen der kan give et eksempel på, hvordan dette kan løses?
Annonceindlæg fra Novataris
24. september 2006 - 13:58
#1
Brug Properties, det er en nem måde at gøre det på Lav følgende ini fil "test.ini" med indhold hostname=www.dyt.dk user=Kaj pass=Børge Gem som C:\test\test.ini import java.io.FileInputStream; import java.io.IOException; import java.util.Properties; public class Test { public Test() { Properties prop = new Properties(); try { String path = "C:\\test\\test.ini"; prop.load(new FileInputStream(path)); String hostname = prop.getProperty("hostname"); String user = prop.getProperty("user"); String pass = prop.getProperty("pass"); System.out.println(hostname + "\n" + user + "\n" + pass); } catch (IOException ex) { ex.printStackTrace(); } } public static void main(String[] args) { new Test(); } }
24. september 2006 - 14:00
#2
Det der er knap smart, er at gemme user og password i en fil som kan læses af alle
24. september 2006 - 14:03
#3
Hvilket alternativ har jeg? :)
24. september 2006 - 14:09
#4
Jeg er interesseret i, at test.ini skal ligge samme sted som applikationen. Hvordan angiver jeg det i path? Dur: String path = "\test.ini";
24. september 2006 - 14:10
#5
Jeg ville gemme databasenavn, username og password på server hvor username og password så verificeres når bruger logger ind, eventuelt i en tabel i db
24. september 2006 - 14:12
#6
Nej, men System.getProperty("user.dir") + (\\test\\test2) hvor dybt i app du gemmer test.ini
24. september 2006 - 14:16
#7
Eller denne getClass().getResource("."); Som giver stien til den aktuelle class fil Prøv selv System.out.println(hostname + "\n" + user + "\n" + pass + "\n" + getClass().getResource("."));
24. september 2006 - 14:30
#8
Jeg fik det til at du bare med: String path = "settings.ini"; Ideen er, at brugeren selv skal kunne ændre mySQL-data, derfor er han jo nødt til at have mulighed for at gemme den et sted?
24. september 2006 - 14:37
#9
Okay, men alle brugere af den pc, kan jo se de andre brugeres password! Jeg kan ikke lige se det skulle være nødvendigt at gemme data på pc'en !?
24. september 2006 - 18:43
#10
Men..tak for hjælpen! Smider du lige et svar?
24. september 2006 - 19:08
#11
OK - men fik vi løst problemet ?
24. september 2006 - 19:19
#12
Næsten. Jeg har denne i toppen af min static method: System.out.println(getClass().getResource(".")); Men jeg får denne fejl: non-static method getClass() cannot be referenced from a static context Kan du fortælle mig, hvorfor jeg får denne fejl?
24. september 2006 - 22:11
#13
Det er fordi du prøver at referer til ikke ikke statisk context i en statisk metode. Flyt din System.out.println(getClass().getResource(".")); hen i public test() metoden og så får du ingen fejl
25. september 2006 - 08:14
#14
Så bør jeg jo få samme problem igen, da test heller ikke er statisk! Jeg har forsøgt mig med: String path = System.getProperty("user.dir") + "/settings.ini"; Men den returnerer f.eks. /home/dennis/settings.ini når jeg forsøger at køre programmet. Det er naturligvis fordi den bliver kørt mens cd er i /home/dennis. Men jeg interesseret i, at få stien til settings-filen. Kan det ikke klares?
25. september 2006 - 19:48
#15
25. september 2006 - 19:58
#16
Sorry - var lige væk et stykke tid. Kører du dit program fra en IDE eller dosprompt ?
25. september 2006 - 20:08
#17
Jeg har forsøgt begge dele.. :)
25. september 2006 - 20:20
#18
Tager du højde for om din fil ligger i en package ? Prøv nedenstående, den virker public class Tester { public Tester() { System.out.println(System.getProperty("user.dir")); System.out.println(getClass().getResource(".")); } public static void main(String[] args) { new Tester(); } }
25. september 2006 - 21:00
#19
Jeg bruger følgende... try { java.security.CodeSource source = Common.class.getProtectionDomain().getCodeSource(); java.net.URI sourceURI = new java.net.URI(source.getLocation().toString()); java.io.File folder = new java.io.File(sourceURI); applicationPath = folder.getParentFile().getAbsolutePath() + fileSeparator; } catch (Exception ex) { applicationPath = System.getProperty("user.dir") + fileSeparator; }
25. september 2006 - 21:01
#20
og så lige forinden... String applicationPath = null; String fileSeparator = System.getProperty("file.separator");
26. september 2006 - 18:32
#21
Stigc >> jeg får denne fejl: /home/dennis/Java/TimetableConvert/src/TimetableConvert.java:17: cannot find symbol symbol : class Common location: class TimetableConvert java.security.CodeSource source = Common.class.getProtectionDomain().getCodeSource()
26. september 2006 - 20:26
#22
:) Det er klippet ud at min kode. Common er klassen hvori den kode indgår i. Skriv i stedet for dit klassenavn, så skulle det virke.
27. september 2006 - 09:23
#23
Perfekt ;) Må jeg bede om et svar fra dig, stigc? Så får du også lige lidt point her..
27. september 2006 - 17:49
#24
Jeg samler ikke rigtig på den. Fint at du kan bruge det.
27. september 2006 - 18:27
#25
Tak for hjælpen!
11. oktober 2006 - 20:06
#26
Håber du kan give mig lidt mere hjælp. Hvordan foreslår du, at jeg skriver til denne settings-fil, når jeg skal have rettet de data der står deri? Er der en metode til det, eller skal jeg selv lave noget som skriver de ønskede linier til filen?
16. oktober 2006 - 12:53
#27
Stigc >> Har du en løsning på problemet?
16. oktober 2006 - 17:38
#28
Næsten det som du gjorde da du hentede File file = new File("..."); FileOutputStream out = new FileOutputStream(file); prop.store(out, "Headline");
02. november 2006 - 20:23
#29
Jeg kan desværre ikke få det til at virke :( Jeg har denne kode: Properties prop = new Properties(); FileOutputStream fileOut = new FileOutputStream(HorseBetting.Application.path + "settings2.ini"); PrintWriter fileOutWrite = new PrintWriter(fileOut); fileOutWrite.print("server="+getServer()); fileOutWrite.print("username="+getUsername()); fileOutWrite.print("password="+getPassword()); fileOutWrite.print("database="+getDatabase()); prop.store(fileOut, "mySQL konfigurationsfile"); Men får bare en fil der indeholder: #mySQL konfigurationsfile #Thu Nov 02 20:28:32 CET 2006 Håber du kan fortælle mig, hvad der er galt?
05. november 2006 - 14:28
#30
kan du hjælpe her?
05. november 2006 - 18:09
#31
Du skal ikke selv skrive properties til filen. Det gør den for dig. prop.setProperty("Field1", "Value1"); prop.setProperty("Field2", "Value2"); prop.setProperty("Field3", "Value3"); //Gem File file = new File("..."); FileOutputStream out = new FileOutputStream(file); prop.store(out, "Headline");
06. november 2006 - 08:09
#32
Tak, det var bedre :) Hvad er det iøvrigt for en underlig rækkefølge prop laver? De komme slet ikke ud i den rækkefølge jeg skrev dem.
Kurser inden for grundlæggende programmering