2013-07-11 3 views
2

Каков наилучший способ получить локальный путь к файлу ressource внутри моего проекта?Получить локальный путь к файлу ressource

У меня есть Lib папку, содержащую файл dummy.exe, который я хочу, чтобы выполнить, но сначала мне нужно знать, где он находится (который может быть различным для каждого пользователя, на основе каталога установки.

+0

А что, если данный ресурс найден в банке? Как вы хотите справиться с этим? – fge

+0

Он находится в файле jar, но я доставляю его в структуре каталогов вместо файла jar по другим причинам. – Markus

ответ

1

Так что я сказал, что первый ответ был правильным для меня, но я был неправ, так как структура каталога не мат ch вообще после развертывания моего приложения. Следующий код находит ressource внутри jar-файла и возвращает его локальный путь к файлу.

String filepath = ""; 

    URL url = Platform.getBundle(MyPLugin.PLUGIN_ID).getEntry("lib/dummy.exe"); 

    try { 
     filepath = FileLocator.toFileURL(url).toString(); 
    } catch (IOException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 

    System.out.println(filepath); 

Путь файловой строки содержит локальный путь к файлу источника, который находится внутри плагина.

1

Во-первых, вы должны смотреть на Oracle "Finding Files" documentation

Они перечисляют рекурсивный согласование файла и дать пример кода:.!

public class Find { 

    public static class Finder 
     extends SimpleFileVisitor<Path> { 

     private final PathMatcher matcher; 
     private int numMatches = 0; 

     Finder(String pattern) { 
      matcher = FileSystems.getDefault() 
        .getPathMatcher("glob:" + pattern); 
     } 

     // Compares the glob pattern against 
     // the file or directory name. 
     void find(Path file) { 
      Path name = file.getFileName(); 
      if (name != null && matcher.matches(name)) { 
       numMatches++; 
       System.out.println(file); 
      } 
     } 

     // Prints the total number of 
     // matches to standard out. 
     void done() { 
      System.out.println("Matched: " 
       + numMatches); 
     } 

     // Invoke the pattern matching 
     // method on each file. 
     @Override 
     public FileVisitResult visitFile(Path file, 
       BasicFileAttributes attrs) { 
      find(file); 
      return CONTINUE; 
     } 

     // Invoke the pattern matching 
     // method on each directory. 
     @Override 
     public FileVisitResult preVisitDirectory(Path dir, 
       BasicFileAttributes attrs) { 
      find(dir); 
      return CONTINUE; 
     } 

     @Override 
     public FileVisitResult visitFileFailed(Path file, 
       IOException exc) { 
      System.err.println(exc); 
      return CONTINUE; 
     } 
    } 

    static void usage() { 
     System.err.println("java Find <path>" + 
      " -name \"<glob_pattern>\""); 
     System.exit(-1); 
    } 

    public static void main(String[] args) 
     throws IOException { 

     if (args.length < 3 || !args[1].equals("-name")) 
      usage(); 

     Path startingDir = Paths.get(args[0]); 
     String pattern = args[2]; 

     Finder finder = new Finder(pattern); 
     Files.walkFileTree(startingDir, finder); 
     finder.done(); 
    } 
} 

удачи

0

Попробуйте

URL loc = this.getClass().getResource("/file"); 
     String path = loc.getPath(); 
      System.out.println(path); 
4

каталог установки, как правило, каталог, в котором запускается ваша ява приложение, этот путь может быть найден из беговой Java приложения, как

System.getProperty("user.dir"); 

Если вы хотите, чтобы получить полный путь файл относительно приложения директории вы можете использовать File.absolutePath

String absolutePath = new File("lib/dummy.exe").getAbsolutePath(); 
+0

Поскольку файл dummy.exe всегда находится в одном и том же месте внутри моего приложения, этот aproach подойдет мне больше всего. Спасибо. Также благодаря другим ответам, которые я буду изучать. – Markus

Смежные вопросы