2016-04-13 25 views
1

Aşağıda enum, JUNIT test durumlarında farklı yerlerde kodlanmış dizin değerlerinden sakınmamı engelliyor. Bu, bir WINDOW kutusundaki IDE içindeki bir geliştirme ortamında çalışıyor gibi görünüyor.Windows/linux kutusunda dosya ayırıcı sorunları

Bu kodu LINUX kutusuna koyduğumda, JUNIT sınıfları dizinleri bulamıyor. Files.exists (sourcePath), false değerini döndürür. Aynı kod IDE'de (windows) doğru döndü. Burada neyin yanlış gittiğine dair işaretçiler var mı? enum

public enum DIRECTORY { 

    OUTPUT("resources/output"), RESOURCE("resources/resource"), PROCESSED_OUTPUT(
      "resources/output/resources/resource"), EXPLODED_WEBAPPS(
      "temp/webapps"), WEBAPPS("webapps"); 

    private String _name; 

    private DIRECTORY(String _name) { 

     this._name = _name; 

    } 

    public String getDirectoryName() { 
     return _name; 
    } 

} 

örnek kullanım kodu

private void restore_csv_files() { 

     Path _processed_output = Paths.get(DIRECTORY.PROCESSED_OUTPUT 
       .getDirectoryName()); 
     Path resource = Paths.get(DIRECTORY.RESOURCE.getDirectoryName()); 

     FileUtility.copy_files(_processed_output, resource); 
     FileUtility.delete_files(_processed_output); 
     FileUtility.delete_directory(_processed_output); 

    } 

Dosya Util sınıfının pencerelerde Temelde

public static void copy_files(Path sourcePath, Path targetPath) { 
     if (Files.exists(sourcePath) && Files.exists(targetPath)) { 
      try { 
       Files.walkFileTree(sourcePath, new SimpleFileVisitor<Path>() { 

        @Override 
        public FileVisitResult visitFile(final Path file, 
          final BasicFileAttributes attrs) throws IOException { 
         Files.copy(file, 
           targetPath.resolve(sourcePath.relativize(file))); 
         return FileVisitResult.CONTINUE; 
        } 
       }); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
     } else { 
      System.out.println("Either Source or Target path does not exist"); 
     } 
    } 

bu şey çalışır, ancak linux kutusunda, bir olsun sysout "Ya Kaynak veya Hedef yolu mevcut değil" (yukarıdaki c'ye bakın) sysout için gazel) Dosya seperatörü için

Numune İstisna

java.nio.file.NoSuchFileException: webapps/web.war 
    at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86) 
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102) 
    at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107) 
    at sun.nio.fs.UnixFileAttributeViews$Basic.readAttributes(UnixFileAttributeViews.java:55) 
    at com.temp.utils.FileUtility.alter_date_time_of_file(Unknown Source) 
    at com.temp.webengine.WebEngineTest.test_web_app_updated_true(Unknown Source) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
+1

Kaynakları dosyaları olmayan kullanmak ve onlar değil dosya sisteminde, CLASSPATH'e var. Göz önünde bulun. – EJP

cevap

4

, System Properties

static String separator = System.getProperty("file.separator"); 
+1

Sanırım 'path.separator' da enum' DIRECTORY' için yararlı olacak –

+0

Yani demek oluyor ki başarısız oluyor. Yani ENUM'da bir yol ayırıcı kullanmamı mı istiyorsun? –

+0

Yol ayırıcı sorunu olduğunu düşünmüyorum. ENUM'a bir göz attıysanız, dosya ayırıcısı linux (/) için doğru şekilde kullanılır. Hiç de başarısız olsaydı, WINDOWS kutusunda değil linux başarısız olmalıydı. Umarım istisna bazı eklenmesi gerekir –