2010-03-19 5 views
5

Windows uygulamasının üstünde Java'nın üstünde büyük bir eski ColdFusion var. Dosya erişimi hem java.io.File hem de CFFILE ile (ki bu da java.io.File kullanır) yapılır, ancak tek bir dosya erişim kütüphanesinde herhangi bir şekilde merkezileştirilmez. Dahası, hem kodda kodlanmış hem de bir veritabanında dosya yollarının olduğunu varsayalım. Başka bir deyişle, dosya yollarının kendilerinin değişemeyeceğini varsayalım. Bu çalıştırmak için bir yolu var mı \ temp \ file.txt Java: Linux'ta Windows dosya yollarıyla uğraşmak için hack arıyor

  • \\ sunucu \ paylaşım \ file.txt
  • :

    • c: Ya yerel veya uzak Windows dosya yolları olabilir minimum kod değişiklikleri ile Linux üzerinde uygulama? 'un eski koduna dokunmayı gerektirmeyen yaratıcı çözümler arıyorum.

      Bazı fikirler: ŞARAP üzerine

      • Run it. Bu aslında çalışır çünkü WINE yerel yolları tercüme eder ve uzak yollar için bir samba istemcisine sahiptir.
      • Dosya yolu çevirisini özel kodla gerçekleştirmek için java.io.File işlevini geçersiz kılmanın bir yolu var mı? Bu durumda, uzak yolları bir bağlama noktasına çeviririm.

    cevap

    6

    java.io.File özel kod ile dosya yolu çevirisini gerçekleştirmek için geçersiz kılmak için bir yolu var mı? Bu durumda, bir bağlama noktası

    Evet uzaktan yolları çevirmek olur, sen java.io.File kendi uygulaması gerçekleştirmek ve ayrı kavanoza yerleştirin ve sonra gerçek java.io.File yerine yükleyebilirsiniz. Eğer java Başlatıcıda java.endorsed.dirs mülkiyet veya java -Xbootclasspath/p:path seçeneği (java)

    AMA kullanabilirsiniz ya da

    JVM yükünü sahip olmak !!!

    java.io.File sınıfının kendi sürümünüzü oluşturmak, eski kaynak kodunu değiştirmek kadar kolay olmayacaktır.Yani

    : Eğer İlk olarak tüm kodlanmış yolları bir kaynak paketi kullanmak ayıklamak şey kırma korkuyorsan

    File file = new File("C:\\Users\\oreyes\\etc.txt"); 
    

    olurdu:

    File file = new File(Paths.get("user.dir.etc")); 
    

    Ve Paths içten bir kaynak paketi

    class Paths { 
        private static ResourceBundle rs = ResourceBundle.getBundle("file.paths"); 
        public static String get(String key) { 
         rs.getString(key); 
        } 
    } 
    
    olurdu

    Bir IDE (genellikle bir uluslararası eklentisi)

    Linux ve bitmiş için farklı bir kaynak paketi sağlayın ile tüm bu kodlanmış yolları çıkarma olabilir. Test ve yeniden deneme ve tekrar test

    Yani, kendi java.io.File yalnızca son kaynak sağlamak kullanın.

    +1

    Kendi java.io.File'ımı JDK'nın en son sürümünü indirip dallara ayırarak prototip oluşturdum. Daha sürdürülebilir olacak bir AoP çözümü üzerinde çalışıyorum. –

    +0

    Saatlerce veya eğlenceli gibi geliyor! :) – OscarRyz

    2

    java.io.File son sınıf değildir ve genişletilebilir. Uzantınızda dosya yollarını çevirecek bir (veya daha fazla) kurucu olabilir. Bu sadece çevirmeni yazmanızı ve Dosya'nın size her genişletilmiş sınıfını değiştirmenizi gerektirecektir.

    Sınıfınız java.io.File'u genişleteceğinden, başka bir kod değişikliği gerekmiyor, ardından başka bir değişiklik yapılması gerekiyor.

    java.io.File file1 = new ClassThatExtendsFile("C:\temp\file.txt"); 
    

    [değiştir]: ya CFFILE uzatmak ve kurucular var geçersiz olabilir.

    +0

    Ne her yerde CFFILE veya java.io.File kullanılan eski kodu dokunuyor önlemek istiyorum. Şimdi, java.io.File'ı kendi uygulamamla değiştirebilseydim, bunu yapardı. –

    +1

    Bunu yapmak için, kaynak kodunu değiştirmek zorunda kalacak ve bu durumda süreçteki yolları değiştirmesi daha iyi olacaktır. – OscarRyz