Variablen in Abhängigkeit vom Betriebssystem festlegen

GGK_01

Bekanntes Mitglied
Hallo,

ich habe ein Programm, dass ich für ein Linux OS laufen lasse, jedoch auf Windows entwickle.
bis jetzt habe ich immer die Variablen mit den unterschiedlichen Filenname ausgetauscht. Da das ziemlichmühsam ist, frage ich bei euch an, wie Ihr da löst.

Java:
if (prop.getProperty(OS).contains("Windows")) {
			System.out.println("Ich bin: " +prop.getProperty(OS));
			String FileOut = "D:/tmp/checkSTS.txt";
		} else {
			System.out.println("Weiss nit wer i bin");
			String FileOut = "/home/User/bin/checkSTS.txt";
		}

Ich kann ja den Wert der Variablen FileOut nicht einfach als public setzen, da der Wert erst innerhalb der If-Anweisung festgelegt wird.

LG, GGK
 
hol dir doch einfach ueber die System properties das user.home dir oder das tmp.dir... also lass das System die richtigen Werte geben
 
das haut nicht hin, da das Programm als Root User läuft, aber nicht im Home/Verzeichnis liegt.
Außerdem greife ich auf das Verzeichnis mehrmals zu (Logging).

GGK
 
Wo soll die Datei denn liegen? Im selben Ordner (oder Unterordner) des Programms oder nur als temporäre Datei? Ich kenn mich im Linux-Dateisystem nicht genau aus, aber /home/User/bin/ und D:/tmp/ sind wohl ziemlich unterschiedliche Ordner in der Verwendung.

Wie bygones schon gesagt hat, lass dir vom System den entsprechenden Ordner geben. Oder leg die Datei in einem Unterordner des Programms ab. Wieso dich das an Mehrfachzugriffen hindern sollte versteh ich nicht. Genauso die unterschiedliche Lokalität von Programm und Datei.

Gruß
Jodo
 
die Datei liegt unter Linux in /home/user1/bin

Laufen wird das Programm als Root, dessen Home Verzeichnis ist /root

Gibt es keinen Weg, den Dateinamen abhängig vom OS in einer Variablen zu setzen und auf diese dann global zugreifen zu können?

GGK
 
if (prop.getProperty(OS).contains("Windows")) {
System.out.println("Ich bin: " +prop.getProperty(OS));
String FileOut = "D:/tmp/checkSTS.txt";
} else {
System.out.println("Weiss nit wer i bin");
String FileOut = "/home/User/bin/checkSTS.txt";
}
Soo geht das natürlich nicht. Du deklarierst die Variable jeweils im if-/else-Zweig und sie ist damit auch nur dort gültig. Du kannst sie als
Code:
public static final
deklarieren und den obigen Code in eine (statische) Hilfsmethode schreiben, die den richtigen Ordner returnt, mit dem die Variable dann initialisiert wird. Ungefähr so:
Java:
public final class AppConstants {

   public static final String OUT_FILE = initOutFile();

   ...

   private static String initOutFile() {

     final Properties sysProps = System.getProperties();

     if (sysProps.getProperty("OS").contains("Windows")) {
            System.out.println("Ich bin: " +sysProps.getProperty("OS"));
            return "D:/tmp/checkSTS.txt";
        } else {
            System.out.println("Weiss nit wer i bin");
            return "/home/User/bin/checkSTS.txt";
        }

   }
}
 
Zuletzt bearbeitet von einem Moderator:

Zurück
Oben