如何声明文件夹路径?

时间:2011-10-06 08:02:57

标签: java

我有一个使用Swing库的桌面应用程序。应用程序正在运行批处理文件。所以我在主项目目录中创建了一个lib文件夹,并将批处理文件放入其中。为了运行它,我显示lib\a.exe来运行它。它正在我的笔记本电脑上工作。我导出.jar并将lib文件夹放在它旁边。它正在我的笔记本电脑上工作,但没有在其他笔记本电脑上工作。如何解决这个问题?

错误消息是:Windows无法找到lib\a.exe

String command = "cmd /c start lib\\a.exe";
            try {
                Runtime.getRuntime().exec(command);
                increaseProgressBarValue();
            } catch (IOException e) {
                e.printStackTrace();
            }

2 个答案:

答案 0 :(得分:3)

你需要两件事:

  1. 找到应用程序的jar文件的目录
  2. 使用正确的工作目录调用a.exe
  3. 您可以使用以下getJar方法获取jar的位置:

    private static File getJar(Class clazz) throws MalformedURLException {
        String name = clazz.getName().replace('.','/') + ".class";
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        URL url = cl.getResource(name);
        System.out.println(url);
        if (!"jar".equals(url.getProtocol())) {
            throw new MalformedURLException("Expected a jar: URL " + url);
        }
        String file = url.getPath();
        int pos = file.lastIndexOf('!');
        if (pos < 0) {
            throw new MalformedURLException("Expected ! " + file);
        }
        url = new URL(file.substring(0, pos));
        if (!"file".equals(url.getProtocol())) {
            throw new MalformedURLException("Expected a file: URL " + url);
        }
        String path = url.getPath();
        if (path.matches("/[A-Za-z]:/")) { // Windoze drive letter
            path = path.substring(1);
        }
        return new File(path);
    }
    

    要调用lib \ a.exe,您可以执行以下操作:

    File jar = getJar(MyClass.class); // MyClass can be any class in you jar file
    File dir = jar.getParentFile();
    ProcessBuilder builder = new ProcessBuilder();
    builder.command("lib\\a.exe");
    builder.directory(dir);
    ...
    Process p = builder.start();
    ...
    

答案 1 :(得分:0)

也许你必须尝试这个文件夹lib是否存在,如果它不是用

创建它
file.mkdir();

这只是一个检查。但是你的文件路径必须是这样的../ lib / a.exe。