Bir Java programının içinden geçerli çalışma dizinini nasıl değiştirebilirim? Bu konu hakkında bulabildiğim her şey bunu yapamayacağınızı iddia ediyor, ancak durumun gerçekten böyle olduğuna inanamıyorum.
Normalde başlatıldığı dizinden sabit kodlanmış göreli bir dosya yolu kullanarak bir dosya açan bir kod parçam var ve bu kodu belirli bir dizinden başlatmak zorunda kalmadan farklı bir Java programı içinden kullanabilmek istiyorum. Sadece System.setProperty( "user.dir", "/path/to/dir" )
komutunu çağırabilmeniz gerekiyor gibi görünüyor, ancak anlayabildiğim kadarıyla, bu satırı çağırmak sessizce başarısız oluyor ve hiçbir şey yapmıyor.
Java'nın bunu yapmanıza izin vermemesini anlayabilirim, eğer mevcut çalışma dizinini getirmenize ve hatta göreceli dosya yollarını kullanarak dosyaları açmanıza izin vermeseydi....
Bunu saf Java'da yapmanın güvenilir bir yolu yoktur. System.setProperty()veya
java -Duser.dir=...aracılığıyla
user.dirözelliğinin ayarlanması,
Filesöğesinin sonraki oluşturulmalarını etkiliyor gibi görünmektedir, ancak örneğin
FileOutputStreams` öğesini etkilememektedir.
File(String parent, String child)`](https://docs.oracle.com/javase/8/docs/api/java/io/File.html#File-java.lang.String-java.lang.String-) kurucusu, dizin yolunuzu dosya yolunuzdan ayrı olarak oluşturuyorsanız yardımcı olabilir ve daha kolay takas yapılmasını sağlar.
Alternatif olarak, Java'yı farklı bir dizinden çalıştırmak için bir komut dosyası ayarlamak veya JNI yerel kodunu kullanmak aşağıda önerildiği gibi.
İlgili Sun hatası 2008 yılında "düzeltilmeyecek" olarak kapatılmıştır.
Eğer doğru anladıysam, bir Java programı mevcut ortam değişkenlerinin bir kopyası ile başlar. System.setProperty(String, String)` ile yapılan herhangi bir değişiklik orijinal ortam değişkenlerini değil kopyayı değiştirir. Bu, Sun'ın neden bu davranışı seçtiğine dair tam bir neden sunmuyor, ancak belki de biraz ışık tutuyor...
Çalışma dizini bir işletim sistemi özelliğidir (işlem başladığında ayarlanır).
Neden kendi Sistem özelliğinizi (-Dsomeprop=/my/path
) geçmiyorsunuz ve bunu kodunuzda Dosyanızın üst öğesi olarak kullanmıyorsunuz?
File f = new File ( System.getProperty("someprop"), myFilename)